From 577919dbfe6377e80e99b1cffd561f895101ef71 Mon Sep 17 00:00:00 2001 From: Zachary Anderson Date: Wed, 4 May 2022 09:28:45 -0700 Subject: [PATCH] Don't hardcode ink sparkle spir-v (#102674) --- dev/bots/analyze.dart | 1 + .../flutter/lib/src/material/ink_sparkle.dart | 3114 +---------------- .../lib/src/material/shaders/ink_sparkle.frag | 106 + packages/flutter_tools/lib/src/asset.dart | 45 +- .../lib/src/build_system/targets/assets.dart | 15 +- .../lib/src/build_system/targets/common.dart | 2 + .../lib/src/build_system/targets/ios.dart | 2 + .../build_system/targets/shader_compiler.dart | 98 + .../flutter_tools/lib/src/bundle_builder.dart | 18 +- .../test/general.shard/asset_bundle_test.dart | 58 + .../targets/shader_compiler_test.dart | 81 + 11 files changed, 429 insertions(+), 3111 deletions(-) create mode 100644 packages/flutter/lib/src/material/shaders/ink_sparkle.frag create mode 100644 packages/flutter_tools/lib/src/build_system/targets/shader_compiler.dart create mode 100644 packages/flutter_tools/test/general.shard/build_system/targets/shader_compiler_test.dart diff --git a/dev/bots/analyze.dart b/dev/bots/analyze.dart index 098bc5ad4b2..3acfb8f98ce 100644 --- a/dev/bots/analyze.dart +++ b/dev/bots/analyze.dart @@ -472,6 +472,7 @@ Future verifyNoMissingLicense(String workingDirectory, { bool checkMinimum failed += await _verifyNoMissingLicenseForExtension(workingDirectory, 'ps1', overrideMinimumMatches ?? 1, _generateLicense('# ')); failed += await _verifyNoMissingLicenseForExtension(workingDirectory, 'html', overrideMinimumMatches ?? 1, '', trailingBlank: false, header: r'\n'); failed += await _verifyNoMissingLicenseForExtension(workingDirectory, 'xml', overrideMinimumMatches ?? 1, '', header: r'(<\?xml version="1.0" encoding="utf-8"\?>\n)?'); + failed += await _verifyNoMissingLicenseForExtension(workingDirectory, 'frag', overrideMinimumMatches ?? 1, _generateLicense('// '), header: r'#version 320 es(\n)+'); if (failed > 0) { exitWithError(['License check failed.']); } diff --git a/packages/flutter/lib/src/material/ink_sparkle.dart b/packages/flutter/lib/src/material/ink_sparkle.dart index ba50bdbe056..f2c6ccbbad7 100644 --- a/packages/flutter/lib/src/material/ink_sparkle.dart +++ b/packages/flutter/lib/src/material/ink_sparkle.dart @@ -7,6 +7,7 @@ import 'dart:math' as math; import 'dart:typed_data'; import 'dart:ui' as ui; +import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart'; import 'package:vector_math/vector_math_64.dart'; @@ -494,7 +495,7 @@ double _getTargetRadius( } // The code below is generated by the package: fragment_shader_manager. - +// It is hand modified to update for flutter/flutter style and asset loading. /// A generated class for managing [FragmentProgram] that includes a /// pre-transpiled shader program into SPIR-V. @@ -502,122 +503,23 @@ double _getTargetRadius( /// See: /// - https://github.com/material-components/material-components-flutter-experimental/tree/fragment-shader-manager/fragment_shader_manager /// -/// GLSL source for this shader: -/// -/// #version 320 es -/// -/// precision highp float; -/// -/// layout(location = 0) uniform vec4 u_color; -/// layout(location = 1) uniform float u_alpha; -/// layout(location = 2) uniform vec4 u_sparkle_color; -/// layout(location = 3) uniform float u_sparkle_alpha; -/// layout(location = 4) uniform float u_blur; -/// layout(location = 5) uniform vec2 u_center; -/// layout(location = 6) uniform float u_radius_scale; -/// layout(location = 7) uniform float u_max_radius; -/// layout(location = 8) uniform vec2 u_resolution_scale; -/// layout(location = 9) uniform vec2 u_noise_scale; -/// layout(location = 10) uniform float u_noise_phase; -/// layout(location = 11) uniform float u_turbulence_phase; -/// layout(location = 12) uniform vec2 u_circle1; -/// layout(location = 13) uniform vec2 u_circle2; -/// layout(location = 14) uniform vec2 u_circle3; -/// layout(location = 15) uniform vec2 u_rotation1; -/// layout(location = 16) uniform vec2 u_rotation2; -/// layout(location = 17) uniform vec2 u_rotation3; -/// -/// layout(location = 0) out vec4 fragColor; -/// -/// const float PI = 3.1415926535897932384626; -/// const float PI_ROTATE_RIGHT = PI * 0.0078125; -/// const float PI_ROTATE_LEFT = PI * -0.0078125; -/// const float ONE_THIRD = 1./3.; -/// const vec2 TURBULENCE_SCALE = vec2(0.8); -/// -/// float saturate(float x) { -/// return clamp(x, 0.0, 1.0); -/// } -/// -/// float triangle_noise(highp vec2 n) { -/// n = fract(n * vec2(5.3987, 5.4421)); -/// n += dot(n.yx, n.xy + vec2(21.5351, 14.3137)); -/// float xy = n.x * n.y; -/// return fract(xy * 95.4307) + fract(xy * 75.04961) - 1.0; -/// } -/// -/// float threshold(float v, float l, float h) { -/// return step(l, v) * (1.0 - step(h, v)); -/// } -/// -/// mat2 rotate2d(vec2 rad){ -/// return mat2(rad.x, -rad.y, rad.y, rad.x); -/// } -/// -/// float soft_circle(vec2 uv, vec2 xy, float radius, float blur) { -/// float blur_half = blur * 0.5; -/// float d = distance(uv, xy); -/// return 1.0 - smoothstep(1.0 - blur_half, 1.0 + blur_half, d / radius); -/// } -/// -/// float soft_ring(vec2 uv, vec2 xy, float radius, float thickness, float blur) { -/// float circle_outer = soft_circle(uv, xy, radius + thickness, blur); -/// float circle_inner = soft_circle(uv, xy, max(radius - thickness, 0.0), blur); -/// return saturate(circle_outer - circle_inner); -/// } -/// -/// float circle_grid(vec2 resolution, vec2 p, float time, vec2 xy, vec2 rotation, float cell_diameter) { -/// p = rotate2d(rotation) * (xy - p) + xy; -/// p = mod(p, cell_diameter) / resolution; -/// float cell_uv = cell_diameter / resolution.y * 0.5; -/// float r = 0.65 * cell_uv; -/// return soft_circle(p, vec2(cell_uv), r, r * 50.0); -/// } -/// -/// float sparkle(vec2 uv, float t) { -/// float n = triangle_noise(uv); -/// float s = threshold(n, 0.0, 0.05); -/// s += threshold(n + sin(PI * (t + 0.35)), 0.1, 0.15); -/// s += threshold(n + sin(PI * (t + 0.7)), 0.2, 0.25); -/// s += threshold(n + sin(PI * (t + 1.05)), 0.3, 0.35); -/// return saturate(s) * 0.55; -/// } -/// -/// float turbulence(vec2 uv) { -/// vec2 uv_scale = uv * TURBULENCE_SCALE; -/// float g1 = circle_grid(TURBULENCE_SCALE, uv_scale, u_turbulence_phase, u_circle1, u_rotation1, 0.17); -/// float g2 = circle_grid(TURBULENCE_SCALE, uv_scale, u_turbulence_phase, u_circle2, u_rotation2, 0.2); -/// float g3 = circle_grid(TURBULENCE_SCALE, uv_scale, u_turbulence_phase, u_circle3, u_rotation3, 0.275); -/// float v = (g1 * g1 + g2 - g3) * 0.5; -/// return saturate(0.45 + 0.8 * v); -/// } -/// -/// void main() { -/// vec2 p = gl_FragCoord.xy; -/// vec2 uv = p * u_resolution_scale; -/// vec2 density_uv = uv - mod(p, u_noise_scale); -/// float radius = u_max_radius * u_radius_scale; -/// float turbulence = turbulence(uv); -/// float ring = soft_ring(p, u_center, radius, 0.05 * u_max_radius, u_blur); -/// float sparkle = sparkle(density_uv, u_noise_phase) * ring * turbulence * u_sparkle_alpha; -/// float wave_alpha = soft_circle(p, u_center, radius, u_blur) * u_alpha * u_color.a; -/// vec4 wave_color = vec4(u_color.rgb * wave_alpha, wave_alpha); -/// vec4 sparkle_color = vec4(u_sparkle_color.rgb * u_sparkle_color.a, u_sparkle_color.a); -/// fragColor = mix(wave_color, sparkle_color, sparkle); -/// } +/// GLSL source for this shader is under `shaders/ink_sparkle.frag`. class FragmentShaderManager { FragmentShaderManager._(); + static late ui.FragmentProgram _program; + /// Creates an [FragmentShaderManager] with an [InkSparkle] effect. static Future inkSparkle() async { final FragmentShaderManager manager = FragmentShaderManager._(); - await manager.compile(); + await manager._compile(); return manager; } /// Compiles the spir-v bytecode into a shader program. - Future compile() async { - _program = await ui.FragmentProgram.compile(spirv: spirvByteBuffer); + Future _compile() async { + final ByteData data = await rootBundle.load('shaders/ink_sparkle.frag'); + _program = await ui.FragmentProgram.compile(spirv: data.buffer); } /// Creates a shader with the original program and optional uniforms. @@ -656,7 +558,6 @@ class FragmentShaderManager { ...uResolutionScale != null ? uResolutionScale.storage : [0, 0], ...uNoiseScale != null ? uNoiseScale.storage : [0, 0], ...uNoisePhase != null ? [uNoisePhase] : [0], - ...uTurbulencePhase != null ? [uTurbulencePhase] : [0], ...uCircle1 != null ? uCircle1.storage : [0, 0], ...uCircle2 != null ? uCircle2.storage : [0, 0], ...uCircle3 != null ? uCircle3.storage : [0, 0], @@ -666,3001 +567,4 @@ class FragmentShaderManager { ]), ); } - - late ui.FragmentProgram _program; - - /// Direct access to the [ui.FragmentProgram] that this class manages. - /// - /// In general, this is not needed, but may be useful for debugging or edge cases. - ui.FragmentProgram get program => _program; - - /// Direct access to the SPIR-V bytecode that was used to generate this class. - /// - /// In general, this is not needed, but may be useful for debugging or edge cases. - /// - /// Words in SPIR-V are 32 bits. Every 4 elements in this list represents 1 - /// SPIR-V word. See https://www.khronos.org/registry/SPIR-V/. - ByteBuffer get spirvByteBuffer => Uint8List.fromList(_spirvByteList).buffer; } - -// TODO(clocksmith): Move spirv to binary asset. -// https://github.com/flutter/flutter/issues/99783 - -/// 11900 bytes -const List _spirvByteList = [ - 0x03,0x02,0x23,0x07, - 0x00,0x00,0x01,0x00, - 0x0A,0x00,0x0D,0x00, - 0xCE,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x11,0x00,0x02,0x00, - 0x01,0x00,0x00,0x00, - 0x0B,0x00,0x06,0x00, - 0x01,0x00,0x00,0x00, - 0x47,0x4C,0x53,0x4C, - 0x2E,0x73,0x74,0x64, - 0x2E,0x34,0x35,0x30, - 0x00,0x00,0x00,0x00, - 0x0E,0x00,0x03,0x00, - 0x00,0x00,0x00,0x00, - 0x01,0x00,0x00,0x00, - 0x0F,0x00,0x07,0x00, - 0x04,0x00,0x00,0x00, - 0x04,0x00,0x00,0x00, - 0x6D,0x61,0x69,0x6E, - 0x00,0x00,0x00,0x00, - 0x62,0x01,0x00,0x00, - 0xC5,0x01,0x00,0x00, - 0x10,0x00,0x03,0x00, - 0x04,0x00,0x00,0x00, - 0x08,0x00,0x00,0x00, - 0x03,0x00,0x03,0x00, - 0x01,0x00,0x00,0x00, - 0x40,0x01,0x00,0x00, - 0x04,0x00,0x0A,0x00, - 0x47,0x4C,0x5F,0x47, - 0x4F,0x4F,0x47,0x4C, - 0x45,0x5F,0x63,0x70, - 0x70,0x5F,0x73,0x74, - 0x79,0x6C,0x65,0x5F, - 0x6C,0x69,0x6E,0x65, - 0x5F,0x64,0x69,0x72, - 0x65,0x63,0x74,0x69, - 0x76,0x65,0x00,0x00, - 0x04,0x00,0x08,0x00, - 0x47,0x4C,0x5F,0x47, - 0x4F,0x4F,0x47,0x4C, - 0x45,0x5F,0x69,0x6E, - 0x63,0x6C,0x75,0x64, - 0x65,0x5F,0x64,0x69, - 0x72,0x65,0x63,0x74, - 0x69,0x76,0x65,0x00, - 0x05,0x00,0x04,0x00, - 0x04,0x00,0x00,0x00, - 0x6D,0x61,0x69,0x6E, - 0x00,0x00,0x00,0x00, - 0x05,0x00,0x06,0x00, - 0x0A,0x00,0x00,0x00, - 0x73,0x61,0x74,0x75, - 0x72,0x61,0x74,0x65, - 0x28,0x66,0x31,0x3B, - 0x00,0x00,0x00,0x00, - 0x05,0x00,0x03,0x00, - 0x09,0x00,0x00,0x00, - 0x78,0x00,0x00,0x00, - 0x05,0x00,0x07,0x00, - 0x10,0x00,0x00,0x00, - 0x74,0x72,0x69,0x61, - 0x6E,0x67,0x6C,0x65, - 0x5F,0x6E,0x6F,0x69, - 0x73,0x65,0x28,0x76, - 0x66,0x32,0x3B,0x00, - 0x05,0x00,0x03,0x00, - 0x0F,0x00,0x00,0x00, - 0x6E,0x00,0x00,0x00, - 0x05,0x00,0x07,0x00, - 0x16,0x00,0x00,0x00, - 0x74,0x68,0x72,0x65, - 0x73,0x68,0x6F,0x6C, - 0x64,0x28,0x66,0x31, - 0x3B,0x66,0x31,0x3B, - 0x66,0x31,0x3B,0x00, - 0x05,0x00,0x03,0x00, - 0x13,0x00,0x00,0x00, - 0x76,0x00,0x00,0x00, - 0x05,0x00,0x03,0x00, - 0x14,0x00,0x00,0x00, - 0x6C,0x00,0x00,0x00, - 0x05,0x00,0x03,0x00, - 0x15,0x00,0x00,0x00, - 0x68,0x00,0x00,0x00, - 0x05,0x00,0x06,0x00, - 0x1B,0x00,0x00,0x00, - 0x72,0x6F,0x74,0x61, - 0x74,0x65,0x32,0x64, - 0x28,0x76,0x66,0x32, - 0x3B,0x00,0x00,0x00, - 0x05,0x00,0x03,0x00, - 0x1A,0x00,0x00,0x00, - 0x72,0x61,0x64,0x00, - 0x05,0x00,0x09,0x00, - 0x22,0x00,0x00,0x00, - 0x73,0x6F,0x66,0x74, - 0x5F,0x63,0x69,0x72, - 0x63,0x6C,0x65,0x28, - 0x76,0x66,0x32,0x3B, - 0x76,0x66,0x32,0x3B, - 0x66,0x31,0x3B,0x66, - 0x31,0x3B,0x00,0x00, - 0x05,0x00,0x03,0x00, - 0x1E,0x00,0x00,0x00, - 0x75,0x76,0x00,0x00, - 0x05,0x00,0x03,0x00, - 0x1F,0x00,0x00,0x00, - 0x78,0x79,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x20,0x00,0x00,0x00, - 0x72,0x61,0x64,0x69, - 0x75,0x73,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x21,0x00,0x00,0x00, - 0x62,0x6C,0x75,0x72, - 0x00,0x00,0x00,0x00, - 0x05,0x00,0x09,0x00, - 0x2A,0x00,0x00,0x00, - 0x73,0x6F,0x66,0x74, - 0x5F,0x72,0x69,0x6E, - 0x67,0x28,0x76,0x66, - 0x32,0x3B,0x76,0x66, - 0x32,0x3B,0x66,0x31, - 0x3B,0x66,0x31,0x3B, - 0x66,0x31,0x3B,0x00, - 0x05,0x00,0x03,0x00, - 0x25,0x00,0x00,0x00, - 0x75,0x76,0x00,0x00, - 0x05,0x00,0x03,0x00, - 0x26,0x00,0x00,0x00, - 0x78,0x79,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x27,0x00,0x00,0x00, - 0x72,0x61,0x64,0x69, - 0x75,0x73,0x00,0x00, - 0x05,0x00,0x05,0x00, - 0x28,0x00,0x00,0x00, - 0x74,0x68,0x69,0x63, - 0x6B,0x6E,0x65,0x73, - 0x73,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x29,0x00,0x00,0x00, - 0x62,0x6C,0x75,0x72, - 0x00,0x00,0x00,0x00, - 0x05,0x00,0x0B,0x00, - 0x33,0x00,0x00,0x00, - 0x63,0x69,0x72,0x63, - 0x6C,0x65,0x5F,0x67, - 0x72,0x69,0x64,0x28, - 0x76,0x66,0x32,0x3B, - 0x76,0x66,0x32,0x3B, - 0x66,0x31,0x3B,0x76, - 0x66,0x32,0x3B,0x76, - 0x66,0x32,0x3B,0x66, - 0x31,0x3B,0x00,0x00, - 0x05,0x00,0x05,0x00, - 0x2D,0x00,0x00,0x00, - 0x72,0x65,0x73,0x6F, - 0x6C,0x75,0x74,0x69, - 0x6F,0x6E,0x00,0x00, - 0x05,0x00,0x03,0x00, - 0x2E,0x00,0x00,0x00, - 0x70,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x2F,0x00,0x00,0x00, - 0x74,0x69,0x6D,0x65, - 0x00,0x00,0x00,0x00, - 0x05,0x00,0x03,0x00, - 0x30,0x00,0x00,0x00, - 0x78,0x79,0x00,0x00, - 0x05,0x00,0x05,0x00, - 0x31,0x00,0x00,0x00, - 0x72,0x6F,0x74,0x61, - 0x74,0x69,0x6F,0x6E, - 0x00,0x00,0x00,0x00, - 0x05,0x00,0x06,0x00, - 0x32,0x00,0x00,0x00, - 0x63,0x65,0x6C,0x6C, - 0x5F,0x64,0x69,0x61, - 0x6D,0x65,0x74,0x65, - 0x72,0x00,0x00,0x00, - 0x05,0x00,0x06,0x00, - 0x38,0x00,0x00,0x00, - 0x73,0x70,0x61,0x72, - 0x6B,0x6C,0x65,0x28, - 0x76,0x66,0x32,0x3B, - 0x66,0x31,0x3B,0x00, - 0x05,0x00,0x03,0x00, - 0x36,0x00,0x00,0x00, - 0x75,0x76,0x00,0x00, - 0x05,0x00,0x03,0x00, - 0x37,0x00,0x00,0x00, - 0x74,0x00,0x00,0x00, - 0x05,0x00,0x06,0x00, - 0x3B,0x00,0x00,0x00, - 0x74,0x75,0x72,0x62, - 0x75,0x6C,0x65,0x6E, - 0x63,0x65,0x28,0x76, - 0x66,0x32,0x3B,0x00, - 0x05,0x00,0x03,0x00, - 0x3A,0x00,0x00,0x00, - 0x75,0x76,0x00,0x00, - 0x05,0x00,0x03,0x00, - 0x54,0x00,0x00,0x00, - 0x78,0x79,0x00,0x00, - 0x05,0x00,0x05,0x00, - 0x81,0x00,0x00,0x00, - 0x62,0x6C,0x75,0x72, - 0x5F,0x68,0x61,0x6C, - 0x66,0x00,0x00,0x00, - 0x05,0x00,0x03,0x00, - 0x85,0x00,0x00,0x00, - 0x64,0x00,0x00,0x00, - 0x05,0x00,0x06,0x00, - 0x94,0x00,0x00,0x00, - 0x63,0x69,0x72,0x63, - 0x6C,0x65,0x5F,0x6F, - 0x75,0x74,0x65,0x72, - 0x00,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x98,0x00,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x9A,0x00,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x9C,0x00,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x9D,0x00,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x06,0x00, - 0xA0,0x00,0x00,0x00, - 0x63,0x69,0x72,0x63, - 0x6C,0x65,0x5F,0x69, - 0x6E,0x6E,0x65,0x72, - 0x00,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0xA5,0x00,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0xA7,0x00,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0xA9,0x00,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0xAA,0x00,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0xB0,0x00,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0xB4,0x00,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0xC3,0x00,0x00,0x00, - 0x63,0x65,0x6C,0x6C, - 0x5F,0x75,0x76,0x00, - 0x05,0x00,0x03,0x00, - 0xC9,0x00,0x00,0x00, - 0x72,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0xD2,0x00,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0xD4,0x00,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0xD5,0x00,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0xD7,0x00,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x03,0x00, - 0xDB,0x00,0x00,0x00, - 0x6E,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0xDC,0x00,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x03,0x00, - 0xDF,0x00,0x00,0x00, - 0x73,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0xE1,0x00,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0xE3,0x00,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0xE4,0x00,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0xF0,0x00,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0xF1,0x00,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0xF2,0x00,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0xFF,0x00,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x00,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x01,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x0D,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x0E,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x0F,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x13,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x05,0x00, - 0x1A,0x01,0x00,0x00, - 0x75,0x76,0x5F,0x73, - 0x63,0x61,0x6C,0x65, - 0x00,0x00,0x00,0x00, - 0x05,0x00,0x03,0x00, - 0x1F,0x01,0x00,0x00, - 0x67,0x31,0x00,0x00, - 0x05,0x00,0x07,0x00, - 0x21,0x01,0x00,0x00, - 0x75,0x5F,0x74,0x75, - 0x72,0x62,0x75,0x6C, - 0x65,0x6E,0x63,0x65, - 0x5F,0x70,0x68,0x61, - 0x73,0x65,0x00,0x00, - 0x05,0x00,0x05,0x00, - 0x23,0x01,0x00,0x00, - 0x75,0x5F,0x63,0x69, - 0x72,0x63,0x6C,0x65, - 0x31,0x00,0x00,0x00, - 0x05,0x00,0x05,0x00, - 0x24,0x01,0x00,0x00, - 0x75,0x5F,0x72,0x6F, - 0x74,0x61,0x74,0x69, - 0x6F,0x6E,0x31,0x00, - 0x05,0x00,0x04,0x00, - 0x26,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x27,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x29,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x2B,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x2D,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x2F,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x03,0x00, - 0x31,0x01,0x00,0x00, - 0x67,0x32,0x00,0x00, - 0x05,0x00,0x05,0x00, - 0x32,0x01,0x00,0x00, - 0x75,0x5F,0x63,0x69, - 0x72,0x63,0x6C,0x65, - 0x32,0x00,0x00,0x00, - 0x05,0x00,0x05,0x00, - 0x33,0x01,0x00,0x00, - 0x75,0x5F,0x72,0x6F, - 0x74,0x61,0x74,0x69, - 0x6F,0x6E,0x32,0x00, - 0x05,0x00,0x04,0x00, - 0x34,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x35,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x37,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x39,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x3B,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x3D,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x03,0x00, - 0x3F,0x01,0x00,0x00, - 0x67,0x33,0x00,0x00, - 0x05,0x00,0x05,0x00, - 0x40,0x01,0x00,0x00, - 0x75,0x5F,0x63,0x69, - 0x72,0x63,0x6C,0x65, - 0x33,0x00,0x00,0x00, - 0x05,0x00,0x05,0x00, - 0x41,0x01,0x00,0x00, - 0x75,0x5F,0x72,0x6F, - 0x74,0x61,0x74,0x69, - 0x6F,0x6E,0x33,0x00, - 0x05,0x00,0x04,0x00, - 0x43,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x44,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x46,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x48,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x4A,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x4C,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x03,0x00, - 0x4E,0x01,0x00,0x00, - 0x76,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x5B,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x03,0x00, - 0x5F,0x01,0x00,0x00, - 0x70,0x00,0x00,0x00, - 0x05,0x00,0x06,0x00, - 0x62,0x01,0x00,0x00, - 0x67,0x6C,0x5F,0x46, - 0x72,0x61,0x67,0x43, - 0x6F,0x6F,0x72,0x64, - 0x00,0x00,0x00,0x00, - 0x05,0x00,0x03,0x00, - 0x65,0x01,0x00,0x00, - 0x75,0x76,0x00,0x00, - 0x05,0x00,0x07,0x00, - 0x67,0x01,0x00,0x00, - 0x75,0x5F,0x72,0x65, - 0x73,0x6F,0x6C,0x75, - 0x74,0x69,0x6F,0x6E, - 0x5F,0x73,0x63,0x61, - 0x6C,0x65,0x00,0x00, - 0x05,0x00,0x05,0x00, - 0x6A,0x01,0x00,0x00, - 0x64,0x65,0x6E,0x73, - 0x69,0x74,0x79,0x5F, - 0x75,0x76,0x00,0x00, - 0x05,0x00,0x06,0x00, - 0x6D,0x01,0x00,0x00, - 0x75,0x5F,0x6E,0x6F, - 0x69,0x73,0x65,0x5F, - 0x73,0x63,0x61,0x6C, - 0x65,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x71,0x01,0x00,0x00, - 0x72,0x61,0x64,0x69, - 0x75,0x73,0x00,0x00, - 0x05,0x00,0x06,0x00, - 0x72,0x01,0x00,0x00, - 0x75,0x5F,0x6D,0x61, - 0x78,0x5F,0x72,0x61, - 0x64,0x69,0x75,0x73, - 0x00,0x00,0x00,0x00, - 0x05,0x00,0x06,0x00, - 0x74,0x01,0x00,0x00, - 0x75,0x5F,0x72,0x61, - 0x64,0x69,0x75,0x73, - 0x5F,0x73,0x63,0x61, - 0x6C,0x65,0x00,0x00, - 0x05,0x00,0x05,0x00, - 0x77,0x01,0x00,0x00, - 0x74,0x75,0x72,0x62, - 0x75,0x6C,0x65,0x6E, - 0x63,0x65,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x78,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x7B,0x01,0x00,0x00, - 0x72,0x69,0x6E,0x67, - 0x00,0x00,0x00,0x00, - 0x05,0x00,0x05,0x00, - 0x7C,0x01,0x00,0x00, - 0x75,0x5F,0x63,0x65, - 0x6E,0x74,0x65,0x72, - 0x00,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x7F,0x01,0x00,0x00, - 0x75,0x5F,0x62,0x6C, - 0x75,0x72,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x80,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x82,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x84,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x86,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x87,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x8A,0x01,0x00,0x00, - 0x73,0x70,0x61,0x72, - 0x6B,0x6C,0x65,0x00, - 0x05,0x00,0x06,0x00, - 0x8B,0x01,0x00,0x00, - 0x75,0x5F,0x6E,0x6F, - 0x69,0x73,0x65,0x5F, - 0x70,0x68,0x61,0x73, - 0x65,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x8C,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x8E,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x06,0x00, - 0x95,0x01,0x00,0x00, - 0x75,0x5F,0x73,0x70, - 0x61,0x72,0x6B,0x6C, - 0x65,0x5F,0x61,0x6C, - 0x70,0x68,0x61,0x00, - 0x05,0x00,0x05,0x00, - 0x98,0x01,0x00,0x00, - 0x77,0x61,0x76,0x65, - 0x5F,0x61,0x6C,0x70, - 0x68,0x61,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x99,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x9B,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x9D,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0x9F,0x01,0x00,0x00, - 0x70,0x61,0x72,0x61, - 0x6D,0x00,0x00,0x00, - 0x05,0x00,0x04,0x00, - 0xA2,0x01,0x00,0x00, - 0x75,0x5F,0x61,0x6C, - 0x70,0x68,0x61,0x00, - 0x05,0x00,0x04,0x00, - 0xA6,0x01,0x00,0x00, - 0x75,0x5F,0x63,0x6F, - 0x6C,0x6F,0x72,0x00, - 0x05,0x00,0x05,0x00, - 0xAC,0x01,0x00,0x00, - 0x77,0x61,0x76,0x65, - 0x5F,0x63,0x6F,0x6C, - 0x6F,0x72,0x00,0x00, - 0x05,0x00,0x06,0x00, - 0xB7,0x01,0x00,0x00, - 0x73,0x70,0x61,0x72, - 0x6B,0x6C,0x65,0x5F, - 0x63,0x6F,0x6C,0x6F, - 0x72,0x00,0x00,0x00, - 0x05,0x00,0x06,0x00, - 0xB8,0x01,0x00,0x00, - 0x75,0x5F,0x73,0x70, - 0x61,0x72,0x6B,0x6C, - 0x65,0x5F,0x63,0x6F, - 0x6C,0x6F,0x72,0x00, - 0x05,0x00,0x05,0x00, - 0xC5,0x01,0x00,0x00, - 0x66,0x72,0x61,0x67, - 0x43,0x6F,0x6C,0x6F, - 0x72,0x00,0x00,0x00, - 0x47,0x00,0x04,0x00, - 0x21,0x01,0x00,0x00, - 0x1E,0x00,0x00,0x00, - 0x0B,0x00,0x00,0x00, - 0x47,0x00,0x04,0x00, - 0x23,0x01,0x00,0x00, - 0x1E,0x00,0x00,0x00, - 0x0C,0x00,0x00,0x00, - 0x47,0x00,0x04,0x00, - 0x24,0x01,0x00,0x00, - 0x1E,0x00,0x00,0x00, - 0x0F,0x00,0x00,0x00, - 0x47,0x00,0x04,0x00, - 0x32,0x01,0x00,0x00, - 0x1E,0x00,0x00,0x00, - 0x0D,0x00,0x00,0x00, - 0x47,0x00,0x04,0x00, - 0x33,0x01,0x00,0x00, - 0x1E,0x00,0x00,0x00, - 0x10,0x00,0x00,0x00, - 0x47,0x00,0x04,0x00, - 0x40,0x01,0x00,0x00, - 0x1E,0x00,0x00,0x00, - 0x0E,0x00,0x00,0x00, - 0x47,0x00,0x04,0x00, - 0x41,0x01,0x00,0x00, - 0x1E,0x00,0x00,0x00, - 0x11,0x00,0x00,0x00, - 0x47,0x00,0x04,0x00, - 0x62,0x01,0x00,0x00, - 0x0B,0x00,0x00,0x00, - 0x0F,0x00,0x00,0x00, - 0x47,0x00,0x04,0x00, - 0x67,0x01,0x00,0x00, - 0x1E,0x00,0x00,0x00, - 0x08,0x00,0x00,0x00, - 0x47,0x00,0x04,0x00, - 0x6D,0x01,0x00,0x00, - 0x1E,0x00,0x00,0x00, - 0x09,0x00,0x00,0x00, - 0x47,0x00,0x04,0x00, - 0x72,0x01,0x00,0x00, - 0x1E,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x47,0x00,0x04,0x00, - 0x74,0x01,0x00,0x00, - 0x1E,0x00,0x00,0x00, - 0x06,0x00,0x00,0x00, - 0x47,0x00,0x04,0x00, - 0x7C,0x01,0x00,0x00, - 0x1E,0x00,0x00,0x00, - 0x05,0x00,0x00,0x00, - 0x47,0x00,0x04,0x00, - 0x7F,0x01,0x00,0x00, - 0x1E,0x00,0x00,0x00, - 0x04,0x00,0x00,0x00, - 0x47,0x00,0x04,0x00, - 0x8B,0x01,0x00,0x00, - 0x1E,0x00,0x00,0x00, - 0x0A,0x00,0x00,0x00, - 0x47,0x00,0x04,0x00, - 0x95,0x01,0x00,0x00, - 0x1E,0x00,0x00,0x00, - 0x03,0x00,0x00,0x00, - 0x47,0x00,0x04,0x00, - 0xA2,0x01,0x00,0x00, - 0x1E,0x00,0x00,0x00, - 0x01,0x00,0x00,0x00, - 0x47,0x00,0x04,0x00, - 0xA6,0x01,0x00,0x00, - 0x1E,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x47,0x00,0x04,0x00, - 0xB8,0x01,0x00,0x00, - 0x1E,0x00,0x00,0x00, - 0x02,0x00,0x00,0x00, - 0x47,0x00,0x04,0x00, - 0xC5,0x01,0x00,0x00, - 0x1E,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x13,0x00,0x02,0x00, - 0x02,0x00,0x00,0x00, - 0x21,0x00,0x03,0x00, - 0x03,0x00,0x00,0x00, - 0x02,0x00,0x00,0x00, - 0x16,0x00,0x03,0x00, - 0x06,0x00,0x00,0x00, - 0x20,0x00,0x00,0x00, - 0x20,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x06,0x00,0x00,0x00, - 0x21,0x00,0x04,0x00, - 0x08,0x00,0x00,0x00, - 0x06,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x17,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x06,0x00,0x00,0x00, - 0x02,0x00,0x00,0x00, - 0x20,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x0C,0x00,0x00,0x00, - 0x21,0x00,0x04,0x00, - 0x0E,0x00,0x00,0x00, - 0x06,0x00,0x00,0x00, - 0x0D,0x00,0x00,0x00, - 0x21,0x00,0x06,0x00, - 0x12,0x00,0x00,0x00, - 0x06,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x18,0x00,0x04,0x00, - 0x18,0x00,0x00,0x00, - 0x0C,0x00,0x00,0x00, - 0x02,0x00,0x00,0x00, - 0x21,0x00,0x04,0x00, - 0x19,0x00,0x00,0x00, - 0x18,0x00,0x00,0x00, - 0x0D,0x00,0x00,0x00, - 0x21,0x00,0x07,0x00, - 0x1D,0x00,0x00,0x00, - 0x06,0x00,0x00,0x00, - 0x0D,0x00,0x00,0x00, - 0x0D,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x21,0x00,0x08,0x00, - 0x24,0x00,0x00,0x00, - 0x06,0x00,0x00,0x00, - 0x0D,0x00,0x00,0x00, - 0x0D,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x21,0x00,0x09,0x00, - 0x2C,0x00,0x00,0x00, - 0x06,0x00,0x00,0x00, - 0x0D,0x00,0x00,0x00, - 0x0D,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x0D,0x00,0x00,0x00, - 0x0D,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x21,0x00,0x05,0x00, - 0x35,0x00,0x00,0x00, - 0x06,0x00,0x00,0x00, - 0x0D,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x3E,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x3F,0x00,0x00,0x00, - 0x00,0x00,0x80,0x3F, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x44,0x00,0x00,0x00, - 0x27,0xC2,0xAC,0x40, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x45,0x00,0x00,0x00, - 0xAF,0x25,0xAE,0x40, - 0x2C,0x00,0x05,0x00, - 0x0C,0x00,0x00,0x00, - 0x46,0x00,0x00,0x00, - 0x44,0x00,0x00,0x00, - 0x45,0x00,0x00,0x00, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x4C,0x00,0x00,0x00, - 0xE3,0x47,0xAC,0x41, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x4D,0x00,0x00,0x00, - 0xEA,0x04,0x65,0x41, - 0x2C,0x00,0x05,0x00, - 0x0C,0x00,0x00,0x00, - 0x4E,0x00,0x00,0x00, - 0x4C,0x00,0x00,0x00, - 0x4D,0x00,0x00,0x00, - 0x15,0x00,0x04,0x00, - 0x55,0x00,0x00,0x00, - 0x20,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x2B,0x00,0x04,0x00, - 0x55,0x00,0x00,0x00, - 0x56,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x2B,0x00,0x04,0x00, - 0x55,0x00,0x00,0x00, - 0x59,0x00,0x00,0x00, - 0x01,0x00,0x00,0x00, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x5E,0x00,0x00,0x00, - 0x85,0xDC,0xBE,0x42, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x62,0x00,0x00,0x00, - 0x66,0x19,0x96,0x42, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x83,0x00,0x00,0x00, - 0x00,0x00,0x00,0x3F, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xCA,0x00,0x00,0x00, - 0x66,0x66,0x26,0x3F, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xD0,0x00,0x00,0x00, - 0x00,0x00,0x48,0x42, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xE0,0x00,0x00,0x00, - 0xCD,0xCC,0x4C,0x3D, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xE7,0x00,0x00,0x00, - 0xDB,0x0F,0x49,0x40, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xE9,0x00,0x00,0x00, - 0x33,0x33,0xB3,0x3E, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xEE,0x00,0x00,0x00, - 0xCD,0xCC,0xCC,0x3D, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xEF,0x00,0x00,0x00, - 0x9A,0x99,0x19,0x3E, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xF8,0x00,0x00,0x00, - 0x33,0x33,0x33,0x3F, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xFD,0x00,0x00,0x00, - 0xCD,0xCC,0x4C,0x3E, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xFE,0x00,0x00,0x00, - 0x00,0x00,0x80,0x3E, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x07,0x01,0x00,0x00, - 0x66,0x66,0x86,0x3F, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x0C,0x01,0x00,0x00, - 0x9A,0x99,0x99,0x3E, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x16,0x01,0x00,0x00, - 0xCD,0xCC,0x0C,0x3F, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x1C,0x01,0x00,0x00, - 0xCD,0xCC,0x4C,0x3F, - 0x2C,0x00,0x05,0x00, - 0x0C,0x00,0x00,0x00, - 0x1D,0x01,0x00,0x00, - 0x1C,0x01,0x00,0x00, - 0x1C,0x01,0x00,0x00, - 0x20,0x00,0x04,0x00, - 0x20,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x06,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x20,0x01,0x00,0x00, - 0x21,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x20,0x00,0x04,0x00, - 0x22,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x0C,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x22,0x01,0x00,0x00, - 0x23,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x22,0x01,0x00,0x00, - 0x24,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x25,0x01,0x00,0x00, - 0x7B,0x14,0x2E,0x3E, - 0x3B,0x00,0x04,0x00, - 0x22,0x01,0x00,0x00, - 0x32,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x22,0x01,0x00,0x00, - 0x33,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x22,0x01,0x00,0x00, - 0x40,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x22,0x01,0x00,0x00, - 0x41,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x42,0x01,0x00,0x00, - 0xCD,0xCC,0x8C,0x3E, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x57,0x01,0x00,0x00, - 0x66,0x66,0xE6,0x3E, - 0x17,0x00,0x04,0x00, - 0x60,0x01,0x00,0x00, - 0x06,0x00,0x00,0x00, - 0x04,0x00,0x00,0x00, - 0x20,0x00,0x04,0x00, - 0x61,0x01,0x00,0x00, - 0x01,0x00,0x00,0x00, - 0x60,0x01,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x61,0x01,0x00,0x00, - 0x62,0x01,0x00,0x00, - 0x01,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x22,0x01,0x00,0x00, - 0x67,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x22,0x01,0x00,0x00, - 0x6D,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x20,0x01,0x00,0x00, - 0x72,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x20,0x01,0x00,0x00, - 0x74,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x22,0x01,0x00,0x00, - 0x7C,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x20,0x01,0x00,0x00, - 0x7F,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x20,0x01,0x00,0x00, - 0x8B,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x20,0x01,0x00,0x00, - 0x95,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x20,0x01,0x00,0x00, - 0xA2,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x20,0x00,0x04,0x00, - 0xA5,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x60,0x01,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0xA5,0x01,0x00,0x00, - 0xA6,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x2B,0x00,0x04,0x00, - 0x55,0x00,0x00,0x00, - 0xA7,0x01,0x00,0x00, - 0x03,0x00,0x00,0x00, - 0x20,0x00,0x04,0x00, - 0xAB,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x60,0x01,0x00,0x00, - 0x17,0x00,0x04,0x00, - 0xAD,0x01,0x00,0x00, - 0x06,0x00,0x00,0x00, - 0x03,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0xA5,0x01,0x00,0x00, - 0xB8,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x20,0x00,0x04,0x00, - 0xC4,0x01,0x00,0x00, - 0x03,0x00,0x00,0x00, - 0x60,0x01,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0xC4,0x01,0x00,0x00, - 0xC5,0x01,0x00,0x00, - 0x03,0x00,0x00,0x00, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xCB,0x01,0x00,0x00, - 0xDB,0x0F,0xC9,0x3C, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xCC,0x01,0x00,0x00, - 0xDB,0x0F,0xC9,0xBC, - 0x2B,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xCD,0x01,0x00,0x00, - 0xAB,0xAA,0xAA,0x3E, - 0x36,0x00,0x05,0x00, - 0x02,0x00,0x00,0x00, - 0x04,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x03,0x00,0x00,0x00, - 0xF8,0x00,0x02,0x00, - 0x05,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0x5F,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0x65,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0x6A,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x71,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x77,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0x78,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x7B,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0x80,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0x82,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x84,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x86,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x87,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x8A,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0x8C,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x8E,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x98,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0x99,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0x9B,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x9D,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x9F,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0xAB,0x01,0x00,0x00, - 0xAC,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0xAB,0x01,0x00,0x00, - 0xB7,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x60,0x01,0x00,0x00, - 0x63,0x01,0x00,0x00, - 0x62,0x01,0x00,0x00, - 0x4F,0x00,0x07,0x00, - 0x0C,0x00,0x00,0x00, - 0x64,0x01,0x00,0x00, - 0x63,0x01,0x00,0x00, - 0x63,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x01,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x5F,0x01,0x00,0x00, - 0x64,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x66,0x01,0x00,0x00, - 0x5F,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x68,0x01,0x00,0x00, - 0x67,0x01,0x00,0x00, - 0x85,0x00,0x05,0x00, - 0x0C,0x00,0x00,0x00, - 0x69,0x01,0x00,0x00, - 0x66,0x01,0x00,0x00, - 0x68,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x65,0x01,0x00,0x00, - 0x69,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x6B,0x01,0x00,0x00, - 0x65,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x6C,0x01,0x00,0x00, - 0x5F,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x6E,0x01,0x00,0x00, - 0x6D,0x01,0x00,0x00, - 0x8D,0x00,0x05,0x00, - 0x0C,0x00,0x00,0x00, - 0x6F,0x01,0x00,0x00, - 0x6C,0x01,0x00,0x00, - 0x6E,0x01,0x00,0x00, - 0x83,0x00,0x05,0x00, - 0x0C,0x00,0x00,0x00, - 0x70,0x01,0x00,0x00, - 0x6B,0x01,0x00,0x00, - 0x6F,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x6A,0x01,0x00,0x00, - 0x70,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x73,0x01,0x00,0x00, - 0x72,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x75,0x01,0x00,0x00, - 0x74,0x01,0x00,0x00, - 0x85,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x76,0x01,0x00,0x00, - 0x73,0x01,0x00,0x00, - 0x75,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x71,0x01,0x00,0x00, - 0x76,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x79,0x01,0x00,0x00, - 0x65,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x78,0x01,0x00,0x00, - 0x79,0x01,0x00,0x00, - 0x39,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x7A,0x01,0x00,0x00, - 0x3B,0x00,0x00,0x00, - 0x78,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x77,0x01,0x00,0x00, - 0x7A,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x7D,0x01,0x00,0x00, - 0x72,0x01,0x00,0x00, - 0x85,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x7E,0x01,0x00,0x00, - 0xE0,0x00,0x00,0x00, - 0x7D,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x81,0x01,0x00,0x00, - 0x5F,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x80,0x01,0x00,0x00, - 0x81,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x83,0x01,0x00,0x00, - 0x7C,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x82,0x01,0x00,0x00, - 0x83,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x85,0x01,0x00,0x00, - 0x71,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x84,0x01,0x00,0x00, - 0x85,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x86,0x01,0x00,0x00, - 0x7E,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x88,0x01,0x00,0x00, - 0x7F,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x87,0x01,0x00,0x00, - 0x88,0x01,0x00,0x00, - 0x39,0x00,0x09,0x00, - 0x06,0x00,0x00,0x00, - 0x89,0x01,0x00,0x00, - 0x2A,0x00,0x00,0x00, - 0x80,0x01,0x00,0x00, - 0x82,0x01,0x00,0x00, - 0x84,0x01,0x00,0x00, - 0x86,0x01,0x00,0x00, - 0x87,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x7B,0x01,0x00,0x00, - 0x89,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x8D,0x01,0x00,0x00, - 0x6A,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x8C,0x01,0x00,0x00, - 0x8D,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x8F,0x01,0x00,0x00, - 0x8B,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x8E,0x01,0x00,0x00, - 0x8F,0x01,0x00,0x00, - 0x39,0x00,0x06,0x00, - 0x06,0x00,0x00,0x00, - 0x90,0x01,0x00,0x00, - 0x38,0x00,0x00,0x00, - 0x8C,0x01,0x00,0x00, - 0x8E,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x91,0x01,0x00,0x00, - 0x7B,0x01,0x00,0x00, - 0x85,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x92,0x01,0x00,0x00, - 0x90,0x01,0x00,0x00, - 0x91,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x93,0x01,0x00,0x00, - 0x77,0x01,0x00,0x00, - 0x85,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x94,0x01,0x00,0x00, - 0x92,0x01,0x00,0x00, - 0x93,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x96,0x01,0x00,0x00, - 0x95,0x01,0x00,0x00, - 0x85,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x97,0x01,0x00,0x00, - 0x94,0x01,0x00,0x00, - 0x96,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x8A,0x01,0x00,0x00, - 0x97,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x9A,0x01,0x00,0x00, - 0x5F,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x99,0x01,0x00,0x00, - 0x9A,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x9C,0x01,0x00,0x00, - 0x7C,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x9B,0x01,0x00,0x00, - 0x9C,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x9E,0x01,0x00,0x00, - 0x71,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x9D,0x01,0x00,0x00, - 0x9E,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xA0,0x01,0x00,0x00, - 0x7F,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x9F,0x01,0x00,0x00, - 0xA0,0x01,0x00,0x00, - 0x39,0x00,0x08,0x00, - 0x06,0x00,0x00,0x00, - 0xA1,0x01,0x00,0x00, - 0x22,0x00,0x00,0x00, - 0x99,0x01,0x00,0x00, - 0x9B,0x01,0x00,0x00, - 0x9D,0x01,0x00,0x00, - 0x9F,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xA3,0x01,0x00,0x00, - 0xA2,0x01,0x00,0x00, - 0x85,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0xA4,0x01,0x00,0x00, - 0xA1,0x01,0x00,0x00, - 0xA3,0x01,0x00,0x00, - 0x41,0x00,0x05,0x00, - 0x20,0x01,0x00,0x00, - 0xA8,0x01,0x00,0x00, - 0xA6,0x01,0x00,0x00, - 0xA7,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xA9,0x01,0x00,0x00, - 0xA8,0x01,0x00,0x00, - 0x85,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0xAA,0x01,0x00,0x00, - 0xA4,0x01,0x00,0x00, - 0xA9,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x98,0x01,0x00,0x00, - 0xAA,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x60,0x01,0x00,0x00, - 0xAE,0x01,0x00,0x00, - 0xA6,0x01,0x00,0x00, - 0x4F,0x00,0x08,0x00, - 0xAD,0x01,0x00,0x00, - 0xAF,0x01,0x00,0x00, - 0xAE,0x01,0x00,0x00, - 0xAE,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x01,0x00,0x00,0x00, - 0x02,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xB0,0x01,0x00,0x00, - 0x98,0x01,0x00,0x00, - 0x8E,0x00,0x05,0x00, - 0xAD,0x01,0x00,0x00, - 0xB1,0x01,0x00,0x00, - 0xAF,0x01,0x00,0x00, - 0xB0,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xB2,0x01,0x00,0x00, - 0x98,0x01,0x00,0x00, - 0x51,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0xB3,0x01,0x00,0x00, - 0xB1,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x51,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0xB4,0x01,0x00,0x00, - 0xB1,0x01,0x00,0x00, - 0x01,0x00,0x00,0x00, - 0x51,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0xB5,0x01,0x00,0x00, - 0xB1,0x01,0x00,0x00, - 0x02,0x00,0x00,0x00, - 0x50,0x00,0x07,0x00, - 0x60,0x01,0x00,0x00, - 0xB6,0x01,0x00,0x00, - 0xB3,0x01,0x00,0x00, - 0xB4,0x01,0x00,0x00, - 0xB5,0x01,0x00,0x00, - 0xB2,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xAC,0x01,0x00,0x00, - 0xB6,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x60,0x01,0x00,0x00, - 0xB9,0x01,0x00,0x00, - 0xB8,0x01,0x00,0x00, - 0x4F,0x00,0x08,0x00, - 0xAD,0x01,0x00,0x00, - 0xBA,0x01,0x00,0x00, - 0xB9,0x01,0x00,0x00, - 0xB9,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x01,0x00,0x00,0x00, - 0x02,0x00,0x00,0x00, - 0x41,0x00,0x05,0x00, - 0x20,0x01,0x00,0x00, - 0xBB,0x01,0x00,0x00, - 0xB8,0x01,0x00,0x00, - 0xA7,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xBC,0x01,0x00,0x00, - 0xBB,0x01,0x00,0x00, - 0x8E,0x00,0x05,0x00, - 0xAD,0x01,0x00,0x00, - 0xBD,0x01,0x00,0x00, - 0xBA,0x01,0x00,0x00, - 0xBC,0x01,0x00,0x00, - 0x41,0x00,0x05,0x00, - 0x20,0x01,0x00,0x00, - 0xBE,0x01,0x00,0x00, - 0xB8,0x01,0x00,0x00, - 0xA7,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xBF,0x01,0x00,0x00, - 0xBE,0x01,0x00,0x00, - 0x51,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0xC0,0x01,0x00,0x00, - 0xBD,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x51,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0xC1,0x01,0x00,0x00, - 0xBD,0x01,0x00,0x00, - 0x01,0x00,0x00,0x00, - 0x51,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0xC2,0x01,0x00,0x00, - 0xBD,0x01,0x00,0x00, - 0x02,0x00,0x00,0x00, - 0x50,0x00,0x07,0x00, - 0x60,0x01,0x00,0x00, - 0xC3,0x01,0x00,0x00, - 0xC0,0x01,0x00,0x00, - 0xC1,0x01,0x00,0x00, - 0xC2,0x01,0x00,0x00, - 0xBF,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xB7,0x01,0x00,0x00, - 0xC3,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x60,0x01,0x00,0x00, - 0xC6,0x01,0x00,0x00, - 0xAC,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x60,0x01,0x00,0x00, - 0xC7,0x01,0x00,0x00, - 0xB7,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xC8,0x01,0x00,0x00, - 0x8A,0x01,0x00,0x00, - 0x50,0x00,0x07,0x00, - 0x60,0x01,0x00,0x00, - 0xC9,0x01,0x00,0x00, - 0xC8,0x01,0x00,0x00, - 0xC8,0x01,0x00,0x00, - 0xC8,0x01,0x00,0x00, - 0xC8,0x01,0x00,0x00, - 0x0C,0x00,0x08,0x00, - 0x60,0x01,0x00,0x00, - 0xCA,0x01,0x00,0x00, - 0x01,0x00,0x00,0x00, - 0x2E,0x00,0x00,0x00, - 0xC6,0x01,0x00,0x00, - 0xC7,0x01,0x00,0x00, - 0xC9,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xC5,0x01,0x00,0x00, - 0xCA,0x01,0x00,0x00, - 0xFD,0x00,0x01,0x00, - 0x38,0x00,0x01,0x00, - 0x36,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x0A,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x08,0x00,0x00,0x00, - 0x37,0x00,0x03,0x00, - 0x07,0x00,0x00,0x00, - 0x09,0x00,0x00,0x00, - 0xF8,0x00,0x02,0x00, - 0x0B,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x3D,0x00,0x00,0x00, - 0x09,0x00,0x00,0x00, - 0x0C,0x00,0x08,0x00, - 0x06,0x00,0x00,0x00, - 0x40,0x00,0x00,0x00, - 0x01,0x00,0x00,0x00, - 0x2B,0x00,0x00,0x00, - 0x3D,0x00,0x00,0x00, - 0x3E,0x00,0x00,0x00, - 0x3F,0x00,0x00,0x00, - 0xFE,0x00,0x02,0x00, - 0x40,0x00,0x00,0x00, - 0x38,0x00,0x01,0x00, - 0x36,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x10,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x0E,0x00,0x00,0x00, - 0x37,0x00,0x03,0x00, - 0x0D,0x00,0x00,0x00, - 0x0F,0x00,0x00,0x00, - 0xF8,0x00,0x02,0x00, - 0x11,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x54,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x43,0x00,0x00,0x00, - 0x0F,0x00,0x00,0x00, - 0x85,0x00,0x05,0x00, - 0x0C,0x00,0x00,0x00, - 0x47,0x00,0x00,0x00, - 0x43,0x00,0x00,0x00, - 0x46,0x00,0x00,0x00, - 0x0C,0x00,0x06,0x00, - 0x0C,0x00,0x00,0x00, - 0x48,0x00,0x00,0x00, - 0x01,0x00,0x00,0x00, - 0x0A,0x00,0x00,0x00, - 0x47,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x0F,0x00,0x00,0x00, - 0x48,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x49,0x00,0x00,0x00, - 0x0F,0x00,0x00,0x00, - 0x4F,0x00,0x07,0x00, - 0x0C,0x00,0x00,0x00, - 0x4A,0x00,0x00,0x00, - 0x49,0x00,0x00,0x00, - 0x49,0x00,0x00,0x00, - 0x01,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x4B,0x00,0x00,0x00, - 0x0F,0x00,0x00,0x00, - 0x81,0x00,0x05,0x00, - 0x0C,0x00,0x00,0x00, - 0x4F,0x00,0x00,0x00, - 0x4B,0x00,0x00,0x00, - 0x4E,0x00,0x00,0x00, - 0x94,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x50,0x00,0x00,0x00, - 0x4A,0x00,0x00,0x00, - 0x4F,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x51,0x00,0x00,0x00, - 0x0F,0x00,0x00,0x00, - 0x50,0x00,0x05,0x00, - 0x0C,0x00,0x00,0x00, - 0x52,0x00,0x00,0x00, - 0x50,0x00,0x00,0x00, - 0x50,0x00,0x00,0x00, - 0x81,0x00,0x05,0x00, - 0x0C,0x00,0x00,0x00, - 0x53,0x00,0x00,0x00, - 0x51,0x00,0x00,0x00, - 0x52,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x0F,0x00,0x00,0x00, - 0x53,0x00,0x00,0x00, - 0x41,0x00,0x05,0x00, - 0x07,0x00,0x00,0x00, - 0x57,0x00,0x00,0x00, - 0x0F,0x00,0x00,0x00, - 0x56,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x58,0x00,0x00,0x00, - 0x57,0x00,0x00,0x00, - 0x41,0x00,0x05,0x00, - 0x07,0x00,0x00,0x00, - 0x5A,0x00,0x00,0x00, - 0x0F,0x00,0x00,0x00, - 0x59,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x5B,0x00,0x00,0x00, - 0x5A,0x00,0x00,0x00, - 0x85,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x5C,0x00,0x00,0x00, - 0x58,0x00,0x00,0x00, - 0x5B,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x54,0x00,0x00,0x00, - 0x5C,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x5D,0x00,0x00,0x00, - 0x54,0x00,0x00,0x00, - 0x85,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x5F,0x00,0x00,0x00, - 0x5D,0x00,0x00,0x00, - 0x5E,0x00,0x00,0x00, - 0x0C,0x00,0x06,0x00, - 0x06,0x00,0x00,0x00, - 0x60,0x00,0x00,0x00, - 0x01,0x00,0x00,0x00, - 0x0A,0x00,0x00,0x00, - 0x5F,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x61,0x00,0x00,0x00, - 0x54,0x00,0x00,0x00, - 0x85,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x63,0x00,0x00,0x00, - 0x61,0x00,0x00,0x00, - 0x62,0x00,0x00,0x00, - 0x0C,0x00,0x06,0x00, - 0x06,0x00,0x00,0x00, - 0x64,0x00,0x00,0x00, - 0x01,0x00,0x00,0x00, - 0x0A,0x00,0x00,0x00, - 0x63,0x00,0x00,0x00, - 0x81,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x65,0x00,0x00,0x00, - 0x60,0x00,0x00,0x00, - 0x64,0x00,0x00,0x00, - 0x83,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x66,0x00,0x00,0x00, - 0x65,0x00,0x00,0x00, - 0x3F,0x00,0x00,0x00, - 0xFE,0x00,0x02,0x00, - 0x66,0x00,0x00,0x00, - 0x38,0x00,0x01,0x00, - 0x36,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x16,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x12,0x00,0x00,0x00, - 0x37,0x00,0x03,0x00, - 0x07,0x00,0x00,0x00, - 0x13,0x00,0x00,0x00, - 0x37,0x00,0x03,0x00, - 0x07,0x00,0x00,0x00, - 0x14,0x00,0x00,0x00, - 0x37,0x00,0x03,0x00, - 0x07,0x00,0x00,0x00, - 0x15,0x00,0x00,0x00, - 0xF8,0x00,0x02,0x00, - 0x17,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x69,0x00,0x00,0x00, - 0x14,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x6A,0x00,0x00,0x00, - 0x13,0x00,0x00,0x00, - 0x0C,0x00,0x07,0x00, - 0x06,0x00,0x00,0x00, - 0x6B,0x00,0x00,0x00, - 0x01,0x00,0x00,0x00, - 0x30,0x00,0x00,0x00, - 0x69,0x00,0x00,0x00, - 0x6A,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x6C,0x00,0x00,0x00, - 0x15,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x6D,0x00,0x00,0x00, - 0x13,0x00,0x00,0x00, - 0x0C,0x00,0x07,0x00, - 0x06,0x00,0x00,0x00, - 0x6E,0x00,0x00,0x00, - 0x01,0x00,0x00,0x00, - 0x30,0x00,0x00,0x00, - 0x6C,0x00,0x00,0x00, - 0x6D,0x00,0x00,0x00, - 0x83,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x6F,0x00,0x00,0x00, - 0x3F,0x00,0x00,0x00, - 0x6E,0x00,0x00,0x00, - 0x85,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x70,0x00,0x00,0x00, - 0x6B,0x00,0x00,0x00, - 0x6F,0x00,0x00,0x00, - 0xFE,0x00,0x02,0x00, - 0x70,0x00,0x00,0x00, - 0x38,0x00,0x01,0x00, - 0x36,0x00,0x05,0x00, - 0x18,0x00,0x00,0x00, - 0x1B,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x19,0x00,0x00,0x00, - 0x37,0x00,0x03,0x00, - 0x0D,0x00,0x00,0x00, - 0x1A,0x00,0x00,0x00, - 0xF8,0x00,0x02,0x00, - 0x1C,0x00,0x00,0x00, - 0x41,0x00,0x05,0x00, - 0x07,0x00,0x00,0x00, - 0x73,0x00,0x00,0x00, - 0x1A,0x00,0x00,0x00, - 0x56,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x74,0x00,0x00,0x00, - 0x73,0x00,0x00,0x00, - 0x41,0x00,0x05,0x00, - 0x07,0x00,0x00,0x00, - 0x75,0x00,0x00,0x00, - 0x1A,0x00,0x00,0x00, - 0x59,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x76,0x00,0x00,0x00, - 0x75,0x00,0x00,0x00, - 0x7F,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x77,0x00,0x00,0x00, - 0x76,0x00,0x00,0x00, - 0x41,0x00,0x05,0x00, - 0x07,0x00,0x00,0x00, - 0x78,0x00,0x00,0x00, - 0x1A,0x00,0x00,0x00, - 0x59,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x79,0x00,0x00,0x00, - 0x78,0x00,0x00,0x00, - 0x41,0x00,0x05,0x00, - 0x07,0x00,0x00,0x00, - 0x7A,0x00,0x00,0x00, - 0x1A,0x00,0x00,0x00, - 0x56,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x7B,0x00,0x00,0x00, - 0x7A,0x00,0x00,0x00, - 0x50,0x00,0x05,0x00, - 0x0C,0x00,0x00,0x00, - 0x7C,0x00,0x00,0x00, - 0x74,0x00,0x00,0x00, - 0x77,0x00,0x00,0x00, - 0x50,0x00,0x05,0x00, - 0x0C,0x00,0x00,0x00, - 0x7D,0x00,0x00,0x00, - 0x79,0x00,0x00,0x00, - 0x7B,0x00,0x00,0x00, - 0x50,0x00,0x05,0x00, - 0x18,0x00,0x00,0x00, - 0x7E,0x00,0x00,0x00, - 0x7C,0x00,0x00,0x00, - 0x7D,0x00,0x00,0x00, - 0xFE,0x00,0x02,0x00, - 0x7E,0x00,0x00,0x00, - 0x38,0x00,0x01,0x00, - 0x36,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x22,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x1D,0x00,0x00,0x00, - 0x37,0x00,0x03,0x00, - 0x0D,0x00,0x00,0x00, - 0x1E,0x00,0x00,0x00, - 0x37,0x00,0x03,0x00, - 0x0D,0x00,0x00,0x00, - 0x1F,0x00,0x00,0x00, - 0x37,0x00,0x03,0x00, - 0x07,0x00,0x00,0x00, - 0x20,0x00,0x00,0x00, - 0x37,0x00,0x03,0x00, - 0x07,0x00,0x00,0x00, - 0x21,0x00,0x00,0x00, - 0xF8,0x00,0x02,0x00, - 0x23,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x81,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x85,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x82,0x00,0x00,0x00, - 0x21,0x00,0x00,0x00, - 0x85,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x84,0x00,0x00,0x00, - 0x82,0x00,0x00,0x00, - 0x83,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x81,0x00,0x00,0x00, - 0x84,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x86,0x00,0x00,0x00, - 0x1E,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x87,0x00,0x00,0x00, - 0x1F,0x00,0x00,0x00, - 0x0C,0x00,0x07,0x00, - 0x06,0x00,0x00,0x00, - 0x88,0x00,0x00,0x00, - 0x01,0x00,0x00,0x00, - 0x43,0x00,0x00,0x00, - 0x86,0x00,0x00,0x00, - 0x87,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x85,0x00,0x00,0x00, - 0x88,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x89,0x00,0x00,0x00, - 0x81,0x00,0x00,0x00, - 0x83,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x8A,0x00,0x00,0x00, - 0x3F,0x00,0x00,0x00, - 0x89,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x8B,0x00,0x00,0x00, - 0x81,0x00,0x00,0x00, - 0x81,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x8C,0x00,0x00,0x00, - 0x3F,0x00,0x00,0x00, - 0x8B,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x8D,0x00,0x00,0x00, - 0x85,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x8E,0x00,0x00,0x00, - 0x20,0x00,0x00,0x00, - 0x88,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x8F,0x00,0x00,0x00, - 0x8D,0x00,0x00,0x00, - 0x8E,0x00,0x00,0x00, - 0x0C,0x00,0x08,0x00, - 0x06,0x00,0x00,0x00, - 0x90,0x00,0x00,0x00, - 0x01,0x00,0x00,0x00, - 0x31,0x00,0x00,0x00, - 0x8A,0x00,0x00,0x00, - 0x8C,0x00,0x00,0x00, - 0x8F,0x00,0x00,0x00, - 0x83,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x91,0x00,0x00,0x00, - 0x3F,0x00,0x00,0x00, - 0x90,0x00,0x00,0x00, - 0xFE,0x00,0x02,0x00, - 0x91,0x00,0x00,0x00, - 0x38,0x00,0x01,0x00, - 0x36,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x2A,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x24,0x00,0x00,0x00, - 0x37,0x00,0x03,0x00, - 0x0D,0x00,0x00,0x00, - 0x25,0x00,0x00,0x00, - 0x37,0x00,0x03,0x00, - 0x0D,0x00,0x00,0x00, - 0x26,0x00,0x00,0x00, - 0x37,0x00,0x03,0x00, - 0x07,0x00,0x00,0x00, - 0x27,0x00,0x00,0x00, - 0x37,0x00,0x03,0x00, - 0x07,0x00,0x00,0x00, - 0x28,0x00,0x00,0x00, - 0x37,0x00,0x03,0x00, - 0x07,0x00,0x00,0x00, - 0x29,0x00,0x00,0x00, - 0xF8,0x00,0x02,0x00, - 0x2B,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x94,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0x98,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0x9A,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x9C,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x9D,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0xA0,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0xA5,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0xA7,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0xA9,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0xAA,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0xB0,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x95,0x00,0x00,0x00, - 0x27,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x96,0x00,0x00,0x00, - 0x28,0x00,0x00,0x00, - 0x81,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x97,0x00,0x00,0x00, - 0x95,0x00,0x00,0x00, - 0x96,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x99,0x00,0x00,0x00, - 0x25,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x98,0x00,0x00,0x00, - 0x99,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x9B,0x00,0x00,0x00, - 0x26,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x9A,0x00,0x00,0x00, - 0x9B,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x9C,0x00,0x00,0x00, - 0x97,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x9E,0x00,0x00,0x00, - 0x29,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x9D,0x00,0x00,0x00, - 0x9E,0x00,0x00,0x00, - 0x39,0x00,0x08,0x00, - 0x06,0x00,0x00,0x00, - 0x9F,0x00,0x00,0x00, - 0x22,0x00,0x00,0x00, - 0x98,0x00,0x00,0x00, - 0x9A,0x00,0x00,0x00, - 0x9C,0x00,0x00,0x00, - 0x9D,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x94,0x00,0x00,0x00, - 0x9F,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xA1,0x00,0x00,0x00, - 0x27,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xA2,0x00,0x00,0x00, - 0x28,0x00,0x00,0x00, - 0x83,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0xA3,0x00,0x00,0x00, - 0xA1,0x00,0x00,0x00, - 0xA2,0x00,0x00,0x00, - 0x0C,0x00,0x07,0x00, - 0x06,0x00,0x00,0x00, - 0xA4,0x00,0x00,0x00, - 0x01,0x00,0x00,0x00, - 0x28,0x00,0x00,0x00, - 0xA3,0x00,0x00,0x00, - 0x3E,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0xA6,0x00,0x00,0x00, - 0x25,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xA5,0x00,0x00,0x00, - 0xA6,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0xA8,0x00,0x00,0x00, - 0x26,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xA7,0x00,0x00,0x00, - 0xA8,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xA9,0x00,0x00,0x00, - 0xA4,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xAB,0x00,0x00,0x00, - 0x29,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xAA,0x00,0x00,0x00, - 0xAB,0x00,0x00,0x00, - 0x39,0x00,0x08,0x00, - 0x06,0x00,0x00,0x00, - 0xAC,0x00,0x00,0x00, - 0x22,0x00,0x00,0x00, - 0xA5,0x00,0x00,0x00, - 0xA7,0x00,0x00,0x00, - 0xA9,0x00,0x00,0x00, - 0xAA,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xA0,0x00,0x00,0x00, - 0xAC,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xAD,0x00,0x00,0x00, - 0x94,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xAE,0x00,0x00,0x00, - 0xA0,0x00,0x00,0x00, - 0x83,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0xAF,0x00,0x00,0x00, - 0xAD,0x00,0x00,0x00, - 0xAE,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xB0,0x00,0x00,0x00, - 0xAF,0x00,0x00,0x00, - 0x39,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0xB1,0x00,0x00,0x00, - 0x0A,0x00,0x00,0x00, - 0xB0,0x00,0x00,0x00, - 0xFE,0x00,0x02,0x00, - 0xB1,0x00,0x00,0x00, - 0x38,0x00,0x01,0x00, - 0x36,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x33,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x2C,0x00,0x00,0x00, - 0x37,0x00,0x03,0x00, - 0x0D,0x00,0x00,0x00, - 0x2D,0x00,0x00,0x00, - 0x37,0x00,0x03,0x00, - 0x0D,0x00,0x00,0x00, - 0x2E,0x00,0x00,0x00, - 0x37,0x00,0x03,0x00, - 0x07,0x00,0x00,0x00, - 0x2F,0x00,0x00,0x00, - 0x37,0x00,0x03,0x00, - 0x0D,0x00,0x00,0x00, - 0x30,0x00,0x00,0x00, - 0x37,0x00,0x03,0x00, - 0x0D,0x00,0x00,0x00, - 0x31,0x00,0x00,0x00, - 0x37,0x00,0x03,0x00, - 0x07,0x00,0x00,0x00, - 0x32,0x00,0x00,0x00, - 0xF8,0x00,0x02,0x00, - 0x34,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0xB4,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0xC3,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0xC9,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0xD2,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0xD4,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0xD5,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0xD7,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0xB5,0x00,0x00,0x00, - 0x31,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xB4,0x00,0x00,0x00, - 0xB5,0x00,0x00,0x00, - 0x39,0x00,0x05,0x00, - 0x18,0x00,0x00,0x00, - 0xB6,0x00,0x00,0x00, - 0x1B,0x00,0x00,0x00, - 0xB4,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0xB7,0x00,0x00,0x00, - 0x30,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0xB8,0x00,0x00,0x00, - 0x2E,0x00,0x00,0x00, - 0x83,0x00,0x05,0x00, - 0x0C,0x00,0x00,0x00, - 0xB9,0x00,0x00,0x00, - 0xB7,0x00,0x00,0x00, - 0xB8,0x00,0x00,0x00, - 0x91,0x00,0x05,0x00, - 0x0C,0x00,0x00,0x00, - 0xBA,0x00,0x00,0x00, - 0xB6,0x00,0x00,0x00, - 0xB9,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0xBB,0x00,0x00,0x00, - 0x30,0x00,0x00,0x00, - 0x81,0x00,0x05,0x00, - 0x0C,0x00,0x00,0x00, - 0xBC,0x00,0x00,0x00, - 0xBA,0x00,0x00,0x00, - 0xBB,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x2E,0x00,0x00,0x00, - 0xBC,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0xBD,0x00,0x00,0x00, - 0x2E,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xBE,0x00,0x00,0x00, - 0x32,0x00,0x00,0x00, - 0x50,0x00,0x05,0x00, - 0x0C,0x00,0x00,0x00, - 0xBF,0x00,0x00,0x00, - 0xBE,0x00,0x00,0x00, - 0xBE,0x00,0x00,0x00, - 0x8D,0x00,0x05,0x00, - 0x0C,0x00,0x00,0x00, - 0xC0,0x00,0x00,0x00, - 0xBD,0x00,0x00,0x00, - 0xBF,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0xC1,0x00,0x00,0x00, - 0x2D,0x00,0x00,0x00, - 0x88,0x00,0x05,0x00, - 0x0C,0x00,0x00,0x00, - 0xC2,0x00,0x00,0x00, - 0xC0,0x00,0x00,0x00, - 0xC1,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x2E,0x00,0x00,0x00, - 0xC2,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xC4,0x00,0x00,0x00, - 0x32,0x00,0x00,0x00, - 0x41,0x00,0x05,0x00, - 0x07,0x00,0x00,0x00, - 0xC5,0x00,0x00,0x00, - 0x2D,0x00,0x00,0x00, - 0x59,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xC6,0x00,0x00,0x00, - 0xC5,0x00,0x00,0x00, - 0x88,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0xC7,0x00,0x00,0x00, - 0xC4,0x00,0x00,0x00, - 0xC6,0x00,0x00,0x00, - 0x85,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0xC8,0x00,0x00,0x00, - 0xC7,0x00,0x00,0x00, - 0x83,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xC3,0x00,0x00,0x00, - 0xC8,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xCB,0x00,0x00,0x00, - 0xC3,0x00,0x00,0x00, - 0x85,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0xCC,0x00,0x00,0x00, - 0xCA,0x00,0x00,0x00, - 0xCB,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xC9,0x00,0x00,0x00, - 0xCC,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xCD,0x00,0x00,0x00, - 0xC3,0x00,0x00,0x00, - 0x50,0x00,0x05,0x00, - 0x0C,0x00,0x00,0x00, - 0xCE,0x00,0x00,0x00, - 0xCD,0x00,0x00,0x00, - 0xCD,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xCF,0x00,0x00,0x00, - 0xC9,0x00,0x00,0x00, - 0x85,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0xD1,0x00,0x00,0x00, - 0xCF,0x00,0x00,0x00, - 0xD0,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0xD3,0x00,0x00,0x00, - 0x2E,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xD2,0x00,0x00,0x00, - 0xD3,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xD4,0x00,0x00,0x00, - 0xCE,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xD6,0x00,0x00,0x00, - 0xC9,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xD5,0x00,0x00,0x00, - 0xD6,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xD7,0x00,0x00,0x00, - 0xD1,0x00,0x00,0x00, - 0x39,0x00,0x08,0x00, - 0x06,0x00,0x00,0x00, - 0xD8,0x00,0x00,0x00, - 0x22,0x00,0x00,0x00, - 0xD2,0x00,0x00,0x00, - 0xD4,0x00,0x00,0x00, - 0xD5,0x00,0x00,0x00, - 0xD7,0x00,0x00,0x00, - 0xFE,0x00,0x02,0x00, - 0xD8,0x00,0x00,0x00, - 0x38,0x00,0x01,0x00, - 0x36,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x38,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x35,0x00,0x00,0x00, - 0x37,0x00,0x03,0x00, - 0x0D,0x00,0x00,0x00, - 0x36,0x00,0x00,0x00, - 0x37,0x00,0x03,0x00, - 0x07,0x00,0x00,0x00, - 0x37,0x00,0x00,0x00, - 0xF8,0x00,0x02,0x00, - 0x39,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0xDB,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0xDC,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0xDF,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0xE1,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0xE3,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0xE4,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0xF0,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0xF1,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0xF2,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0xFF,0x00,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x00,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x01,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x0D,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x0E,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x0F,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x13,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0xDD,0x00,0x00,0x00, - 0x36,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xDC,0x00,0x00,0x00, - 0xDD,0x00,0x00,0x00, - 0x39,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0xDE,0x00,0x00,0x00, - 0x10,0x00,0x00,0x00, - 0xDC,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xDB,0x00,0x00,0x00, - 0xDE,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xE2,0x00,0x00,0x00, - 0xDB,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xE1,0x00,0x00,0x00, - 0xE2,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xE3,0x00,0x00,0x00, - 0x3E,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xE4,0x00,0x00,0x00, - 0xE0,0x00,0x00,0x00, - 0x39,0x00,0x07,0x00, - 0x06,0x00,0x00,0x00, - 0xE5,0x00,0x00,0x00, - 0x16,0x00,0x00,0x00, - 0xE1,0x00,0x00,0x00, - 0xE3,0x00,0x00,0x00, - 0xE4,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xDF,0x00,0x00,0x00, - 0xE5,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xE6,0x00,0x00,0x00, - 0xDB,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xE8,0x00,0x00,0x00, - 0x37,0x00,0x00,0x00, - 0x81,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0xEA,0x00,0x00,0x00, - 0xE8,0x00,0x00,0x00, - 0xE9,0x00,0x00,0x00, - 0x85,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0xEB,0x00,0x00,0x00, - 0xE7,0x00,0x00,0x00, - 0xEA,0x00,0x00,0x00, - 0x0C,0x00,0x06,0x00, - 0x06,0x00,0x00,0x00, - 0xEC,0x00,0x00,0x00, - 0x01,0x00,0x00,0x00, - 0x0D,0x00,0x00,0x00, - 0xEB,0x00,0x00,0x00, - 0x81,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0xED,0x00,0x00,0x00, - 0xE6,0x00,0x00,0x00, - 0xEC,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xF0,0x00,0x00,0x00, - 0xED,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xF1,0x00,0x00,0x00, - 0xEE,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xF2,0x00,0x00,0x00, - 0xEF,0x00,0x00,0x00, - 0x39,0x00,0x07,0x00, - 0x06,0x00,0x00,0x00, - 0xF3,0x00,0x00,0x00, - 0x16,0x00,0x00,0x00, - 0xF0,0x00,0x00,0x00, - 0xF1,0x00,0x00,0x00, - 0xF2,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xF4,0x00,0x00,0x00, - 0xDF,0x00,0x00,0x00, - 0x81,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0xF5,0x00,0x00,0x00, - 0xF4,0x00,0x00,0x00, - 0xF3,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xDF,0x00,0x00,0x00, - 0xF5,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xF6,0x00,0x00,0x00, - 0xDB,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0xF7,0x00,0x00,0x00, - 0x37,0x00,0x00,0x00, - 0x81,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0xF9,0x00,0x00,0x00, - 0xF7,0x00,0x00,0x00, - 0xF8,0x00,0x00,0x00, - 0x85,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0xFA,0x00,0x00,0x00, - 0xE7,0x00,0x00,0x00, - 0xF9,0x00,0x00,0x00, - 0x0C,0x00,0x06,0x00, - 0x06,0x00,0x00,0x00, - 0xFB,0x00,0x00,0x00, - 0x01,0x00,0x00,0x00, - 0x0D,0x00,0x00,0x00, - 0xFA,0x00,0x00,0x00, - 0x81,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0xFC,0x00,0x00,0x00, - 0xF6,0x00,0x00,0x00, - 0xFB,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xFF,0x00,0x00,0x00, - 0xFC,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x00,0x01,0x00,0x00, - 0xFD,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x01,0x01,0x00,0x00, - 0xFE,0x00,0x00,0x00, - 0x39,0x00,0x07,0x00, - 0x06,0x00,0x00,0x00, - 0x02,0x01,0x00,0x00, - 0x16,0x00,0x00,0x00, - 0xFF,0x00,0x00,0x00, - 0x00,0x01,0x00,0x00, - 0x01,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x03,0x01,0x00,0x00, - 0xDF,0x00,0x00,0x00, - 0x81,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x04,0x01,0x00,0x00, - 0x03,0x01,0x00,0x00, - 0x02,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xDF,0x00,0x00,0x00, - 0x04,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x05,0x01,0x00,0x00, - 0xDB,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x06,0x01,0x00,0x00, - 0x37,0x00,0x00,0x00, - 0x81,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x08,0x01,0x00,0x00, - 0x06,0x01,0x00,0x00, - 0x07,0x01,0x00,0x00, - 0x85,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x09,0x01,0x00,0x00, - 0xE7,0x00,0x00,0x00, - 0x08,0x01,0x00,0x00, - 0x0C,0x00,0x06,0x00, - 0x06,0x00,0x00,0x00, - 0x0A,0x01,0x00,0x00, - 0x01,0x00,0x00,0x00, - 0x0D,0x00,0x00,0x00, - 0x09,0x01,0x00,0x00, - 0x81,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x0B,0x01,0x00,0x00, - 0x05,0x01,0x00,0x00, - 0x0A,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x0D,0x01,0x00,0x00, - 0x0B,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x0E,0x01,0x00,0x00, - 0x0C,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x0F,0x01,0x00,0x00, - 0xE9,0x00,0x00,0x00, - 0x39,0x00,0x07,0x00, - 0x06,0x00,0x00,0x00, - 0x10,0x01,0x00,0x00, - 0x16,0x00,0x00,0x00, - 0x0D,0x01,0x00,0x00, - 0x0E,0x01,0x00,0x00, - 0x0F,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x11,0x01,0x00,0x00, - 0xDF,0x00,0x00,0x00, - 0x81,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x12,0x01,0x00,0x00, - 0x11,0x01,0x00,0x00, - 0x10,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0xDF,0x00,0x00,0x00, - 0x12,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x14,0x01,0x00,0x00, - 0xDF,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x13,0x01,0x00,0x00, - 0x14,0x01,0x00,0x00, - 0x39,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x15,0x01,0x00,0x00, - 0x0A,0x00,0x00,0x00, - 0x13,0x01,0x00,0x00, - 0x85,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x17,0x01,0x00,0x00, - 0x15,0x01,0x00,0x00, - 0x16,0x01,0x00,0x00, - 0xFE,0x00,0x02,0x00, - 0x17,0x01,0x00,0x00, - 0x38,0x00,0x01,0x00, - 0x36,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x3B,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00, - 0x0E,0x00,0x00,0x00, - 0x37,0x00,0x03,0x00, - 0x0D,0x00,0x00,0x00, - 0x3A,0x00,0x00,0x00, - 0xF8,0x00,0x02,0x00, - 0x3C,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0x1A,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x1F,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0x26,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0x27,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x29,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0x2B,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0x2D,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x2F,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x31,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0x34,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0x35,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x37,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0x39,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0x3B,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x3D,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x3F,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0x43,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0x44,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x46,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0x48,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x0D,0x00,0x00,0x00, - 0x4A,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x4C,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x4E,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3B,0x00,0x04,0x00, - 0x07,0x00,0x00,0x00, - 0x5B,0x01,0x00,0x00, - 0x07,0x00,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x1B,0x01,0x00,0x00, - 0x3A,0x00,0x00,0x00, - 0x85,0x00,0x05,0x00, - 0x0C,0x00,0x00,0x00, - 0x1E,0x01,0x00,0x00, - 0x1B,0x01,0x00,0x00, - 0x1D,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x1A,0x01,0x00,0x00, - 0x1E,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x26,0x01,0x00,0x00, - 0x1D,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x28,0x01,0x00,0x00, - 0x1A,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x27,0x01,0x00,0x00, - 0x28,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x2A,0x01,0x00,0x00, - 0x21,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x29,0x01,0x00,0x00, - 0x2A,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x2C,0x01,0x00,0x00, - 0x23,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x2B,0x01,0x00,0x00, - 0x2C,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x2E,0x01,0x00,0x00, - 0x24,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x2D,0x01,0x00,0x00, - 0x2E,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x2F,0x01,0x00,0x00, - 0x25,0x01,0x00,0x00, - 0x39,0x00,0x0A,0x00, - 0x06,0x00,0x00,0x00, - 0x30,0x01,0x00,0x00, - 0x33,0x00,0x00,0x00, - 0x26,0x01,0x00,0x00, - 0x27,0x01,0x00,0x00, - 0x29,0x01,0x00,0x00, - 0x2B,0x01,0x00,0x00, - 0x2D,0x01,0x00,0x00, - 0x2F,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x1F,0x01,0x00,0x00, - 0x30,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x34,0x01,0x00,0x00, - 0x1D,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x36,0x01,0x00,0x00, - 0x1A,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x35,0x01,0x00,0x00, - 0x36,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x38,0x01,0x00,0x00, - 0x21,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x37,0x01,0x00,0x00, - 0x38,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x3A,0x01,0x00,0x00, - 0x32,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x39,0x01,0x00,0x00, - 0x3A,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x3C,0x01,0x00,0x00, - 0x33,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x3B,0x01,0x00,0x00, - 0x3C,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x3D,0x01,0x00,0x00, - 0xFD,0x00,0x00,0x00, - 0x39,0x00,0x0A,0x00, - 0x06,0x00,0x00,0x00, - 0x3E,0x01,0x00,0x00, - 0x33,0x00,0x00,0x00, - 0x34,0x01,0x00,0x00, - 0x35,0x01,0x00,0x00, - 0x37,0x01,0x00,0x00, - 0x39,0x01,0x00,0x00, - 0x3B,0x01,0x00,0x00, - 0x3D,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x31,0x01,0x00,0x00, - 0x3E,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x43,0x01,0x00,0x00, - 0x1D,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x45,0x01,0x00,0x00, - 0x1A,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x44,0x01,0x00,0x00, - 0x45,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x47,0x01,0x00,0x00, - 0x21,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x46,0x01,0x00,0x00, - 0x47,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x49,0x01,0x00,0x00, - 0x40,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x48,0x01,0x00,0x00, - 0x49,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x0C,0x00,0x00,0x00, - 0x4B,0x01,0x00,0x00, - 0x41,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x4A,0x01,0x00,0x00, - 0x4B,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x4C,0x01,0x00,0x00, - 0x42,0x01,0x00,0x00, - 0x39,0x00,0x0A,0x00, - 0x06,0x00,0x00,0x00, - 0x4D,0x01,0x00,0x00, - 0x33,0x00,0x00,0x00, - 0x43,0x01,0x00,0x00, - 0x44,0x01,0x00,0x00, - 0x46,0x01,0x00,0x00, - 0x48,0x01,0x00,0x00, - 0x4A,0x01,0x00,0x00, - 0x4C,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x3F,0x01,0x00,0x00, - 0x4D,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x4F,0x01,0x00,0x00, - 0x1F,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x50,0x01,0x00,0x00, - 0x1F,0x01,0x00,0x00, - 0x85,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x51,0x01,0x00,0x00, - 0x4F,0x01,0x00,0x00, - 0x50,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x52,0x01,0x00,0x00, - 0x31,0x01,0x00,0x00, - 0x81,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x53,0x01,0x00,0x00, - 0x51,0x01,0x00,0x00, - 0x52,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x54,0x01,0x00,0x00, - 0x3F,0x01,0x00,0x00, - 0x83,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x55,0x01,0x00,0x00, - 0x53,0x01,0x00,0x00, - 0x54,0x01,0x00,0x00, - 0x85,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x56,0x01,0x00,0x00, - 0x55,0x01,0x00,0x00, - 0x83,0x00,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x4E,0x01,0x00,0x00, - 0x56,0x01,0x00,0x00, - 0x3D,0x00,0x04,0x00, - 0x06,0x00,0x00,0x00, - 0x58,0x01,0x00,0x00, - 0x4E,0x01,0x00,0x00, - 0x85,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x59,0x01,0x00,0x00, - 0x1C,0x01,0x00,0x00, - 0x58,0x01,0x00,0x00, - 0x81,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x5A,0x01,0x00,0x00, - 0x57,0x01,0x00,0x00, - 0x59,0x01,0x00,0x00, - 0x3E,0x00,0x03,0x00, - 0x5B,0x01,0x00,0x00, - 0x5A,0x01,0x00,0x00, - 0x39,0x00,0x05,0x00, - 0x06,0x00,0x00,0x00, - 0x5C,0x01,0x00,0x00, - 0x0A,0x00,0x00,0x00, - 0x5B,0x01,0x00,0x00, - 0xFE,0x00,0x02,0x00, - 0x5C,0x01,0x00,0x00, - 0x38,0x00,0x01,0x00, -]; diff --git a/packages/flutter/lib/src/material/shaders/ink_sparkle.frag b/packages/flutter/lib/src/material/shaders/ink_sparkle.frag new file mode 100644 index 00000000000..9d9e2717e63 --- /dev/null +++ b/packages/flutter/lib/src/material/shaders/ink_sparkle.frag @@ -0,0 +1,106 @@ +#version 320 es + +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +precision highp float; + +// TODO(antrob): Put these in a more logical order (e.g. separate consts vs varying, etc) + +layout(location = 0) uniform vec4 u_color; +layout(location = 1) uniform float u_alpha; +layout(location = 2) uniform vec4 u_sparkle_color; +layout(location = 3) uniform float u_sparkle_alpha; +layout(location = 4) uniform float u_blur; +layout(location = 5) uniform vec2 u_center; +layout(location = 6) uniform float u_radius_scale; +layout(location = 7) uniform float u_max_radius; +layout(location = 8) uniform vec2 u_resolution_scale; +layout(location = 9) uniform vec2 u_noise_scale; +layout(location = 10) uniform float u_noise_phase; +layout(location = 11) uniform vec2 u_circle1; +layout(location = 12) uniform vec2 u_circle2; +layout(location = 13) uniform vec2 u_circle3; +layout(location = 14) uniform vec2 u_rotation1; +layout(location = 15) uniform vec2 u_rotation2; +layout(location = 16) uniform vec2 u_rotation3; + +layout(location = 0) out vec4 fragColor; + +const float PI = 3.1415926535897932384626; +const float PI_ROTATE_RIGHT = PI * 0.0078125; +const float PI_ROTATE_LEFT = PI * -0.0078125; +const float ONE_THIRD = 1./3.; +const vec2 TURBULENCE_SCALE = vec2(0.8); + +float saturate(float x) { + return clamp(x, 0.0, 1.0); +} + +float triangle_noise(highp vec2 n) { + n = fract(n * vec2(5.3987, 5.4421)); + n += dot(n.yx, n.xy + vec2(21.5351, 14.3137)); + float xy = n.x * n.y; + return fract(xy * 95.4307) + fract(xy * 75.04961) - 1.0; +} + +float threshold(float v, float l, float h) { + return step(l, v) * (1.0 - step(h, v)); +} + +mat2 rotate2d(vec2 rad){ + return mat2(rad.x, -rad.y, rad.y, rad.x); +} + +float soft_circle(vec2 uv, vec2 xy, float radius, float blur) { + float blur_half = blur * 0.5; + float d = distance(uv, xy); + return 1.0 - smoothstep(1.0 - blur_half, 1.0 + blur_half, d / radius); +} + +float soft_ring(vec2 uv, vec2 xy, float radius, float thickness, float blur) { + float circle_outer = soft_circle(uv, xy, radius + thickness, blur); + float circle_inner = soft_circle(uv, xy, max(radius - thickness, 0.0), blur); + return saturate(circle_outer - circle_inner); +} + +float circle_grid(vec2 resolution, vec2 p, vec2 xy, vec2 rotation, float cell_diameter) { + p = rotate2d(rotation) * (xy - p) + xy; + p = mod(p, cell_diameter) / resolution; + float cell_uv = cell_diameter / resolution.y * 0.5; + float r = 0.65 * cell_uv; + return soft_circle(p, vec2(cell_uv), r, r * 50.0); +} + +float sparkle(vec2 uv, float t) { + float n = triangle_noise(uv); + float s = threshold(n, 0.0, 0.05); + s += threshold(n + sin(PI * (t + 0.35)), 0.1, 0.15); + s += threshold(n + sin(PI * (t + 0.7)), 0.2, 0.25); + s += threshold(n + sin(PI * (t + 1.05)), 0.3, 0.35); + return saturate(s) * 0.55; +} + +float turbulence(vec2 uv) { + vec2 uv_scale = uv * TURBULENCE_SCALE; + float g1 = circle_grid(TURBULENCE_SCALE, uv_scale, u_circle1, u_rotation1, 0.17); + float g2 = circle_grid(TURBULENCE_SCALE, uv_scale, u_circle2, u_rotation2, 0.2); + float g3 = circle_grid(TURBULENCE_SCALE, uv_scale, u_circle3, u_rotation3, 0.275); + float v = (g1 * g1 + g2 - g3) * 0.5; + return saturate(0.45 + 0.8 * v); +} + +void main() { + vec2 p = gl_FragCoord.xy; + vec2 uv = p * u_resolution_scale; + vec2 density_uv = uv - mod(p, u_noise_scale); + float radius = u_max_radius * u_radius_scale; + float turbulence = turbulence(uv); + float ring = soft_ring(p, u_center, radius, 0.05 * u_max_radius, u_blur); + float sparkle = sparkle(density_uv, u_noise_phase) * ring * turbulence * u_sparkle_alpha; + float wave_alpha = soft_circle(p, u_center, radius, u_blur) * u_alpha * u_color.a; + vec4 wave_color = vec4(u_color.rgb * wave_alpha, wave_alpha); + vec4 sparkle_color = vec4(u_sparkle_color.rgb * u_sparkle_color.a, u_sparkle_color.a); + fragColor = mix(wave_color, sparkle_color, sparkle); +} diff --git a/packages/flutter_tools/lib/src/asset.dart b/packages/flutter_tools/lib/src/asset.dart index ed42baea293..1cae4953d12 100644 --- a/packages/flutter_tools/lib/src/asset.dart +++ b/packages/flutter_tools/lib/src/asset.dart @@ -43,6 +43,10 @@ const List> kMaterialFonts = >[ }, ]; +const List kMaterialShaders = [ + 'shaders/ink_sparkle.frag', +]; + /// Injected factory class for spawning [AssetBundle] instances. abstract class AssetBundleFactory { /// The singleton instance, pulled from the [AppContext]. @@ -404,11 +408,15 @@ class ManifestAssetBundle implements AssetBundle { } final List<_Asset> materialAssets = <_Asset>[ if (flutterManifest.usesMaterialDesign) - ..._getMaterialAssets(), + ..._getMaterialFonts(), + // Include the shaders unconditionally. They are small, and whether + // they're used is determined only by the app source code and not by + // the Flutter manifest. + ..._getMaterialShaders(), ]; for (final _Asset asset in materialAssets) { final File assetFile = asset.lookupAssetFile(_fileSystem); - assert(assetFile.existsSync()); + assert(assetFile.existsSync(), 'Missing ${assetFile.path}'); entries[asset.entryUri.path] ??= DevFSFileContent(assetFile); } @@ -490,7 +498,7 @@ class ManifestAssetBundle implements AssetBundle { } } - List<_Asset> _getMaterialAssets() { + List<_Asset> _getMaterialFonts() { final List<_Asset> result = <_Asset>[]; for (final Map family in kMaterialFonts) { final Object? fonts = family['fonts']; @@ -504,7 +512,10 @@ class ManifestAssetBundle implements AssetBundle { } final Uri entryUri = _fileSystem.path.toUri(asset); result.add(_Asset( - baseDir: _fileSystem.path.join(Cache.flutterRoot!, 'bin', 'cache', 'artifacts', 'material_fonts'), + baseDir: _fileSystem.path.join( + Cache.flutterRoot!, + 'bin', 'cache', 'artifacts', 'material_fonts', + ), relativeUri: Uri(path: entryUri.pathSegments.last), entryUri: entryUri, package: null, @@ -515,6 +526,32 @@ class ManifestAssetBundle implements AssetBundle { return result; } + List<_Asset> _getMaterialShaders() { + final String shaderPath = _fileSystem.path.join( + Cache.flutterRoot!, + 'packages', 'flutter', 'lib', 'src', 'material', 'shaders', + ); + // This file will exist in a real invocation unless the git checkout is + // corrupted somehow, but unit tests generally don't create this file + // in their mock file systems. Leaving it out in those cases is harmless. + if (!_fileSystem.directory(shaderPath).existsSync()) { + return <_Asset>[]; + } + + final List<_Asset> result = <_Asset>[]; + for (final String shader in kMaterialShaders) { + final Uri entryUri = _fileSystem.path.toUri(shader); + result.add(_Asset( + baseDir: shaderPath, + relativeUri: Uri(path: entryUri.pathSegments.last), + entryUri: entryUri, + package: null, + )); + } + + return result; + } + List> _parseFonts( FlutterManifest manifest, PackageConfig packageConfig, { diff --git a/packages/flutter_tools/lib/src/build_system/targets/assets.dart b/packages/flutter_tools/lib/src/build_system/targets/assets.dart index ceb90754801..f6bd39660fb 100644 --- a/packages/flutter_tools/lib/src/build_system/targets/assets.dart +++ b/packages/flutter_tools/lib/src/build_system/targets/assets.dart @@ -14,6 +14,7 @@ import '../build_system.dart'; import '../depfile.dart'; import 'common.dart'; import 'icon_tree_shaker.dart'; +import 'shader_compiler.dart'; /// A helper function to copy an asset bundle into an [environment]'s output /// directory. @@ -24,7 +25,9 @@ import 'icon_tree_shaker.dart'; /// included in the final bundle, but not the AssetManifest.json file. /// /// Returns a [Depfile] containing all assets used in the build. -Future copyAssets(Environment environment, Directory outputDirectory, { +Future copyAssets( + Environment environment, + Directory outputDirectory, { Map? additionalContent, required TargetPlatform targetPlatform, BuildMode? buildMode, @@ -72,6 +75,12 @@ Future copyAssets(Environment environment, Directory outputDirectory, { fileSystem: environment.fileSystem, artifacts: environment.artifacts, ); + final ShaderCompiler shaderCompiler = ShaderCompiler( + processManager: environment.processManager, + logger: environment.logger, + fileSystem: environment.fileSystem, + artifacts: environment.artifacts, + ); final Map assetEntries = { ...assetBundle.entries, @@ -100,6 +109,9 @@ Future copyAssets(Environment environment, Directory outputDirectory, { input: content.file as File, outputPath: file.path, relativePath: entry.key, + ) && !await shaderCompiler.compileShader( + input: content.file as File, + outputPath: file.path, )) { await (content.file as File).copy(file.path); } @@ -258,6 +270,7 @@ class CopyAssets extends Target { List get inputs => const [ Source.pattern('{FLUTTER_ROOT}/packages/flutter_tools/lib/src/build_system/targets/assets.dart'), ...IconTreeShaker.inputs, + ...ShaderCompiler.inputs, ]; @override diff --git a/packages/flutter_tools/lib/src/build_system/targets/common.dart b/packages/flutter_tools/lib/src/build_system/targets/common.dart index 899c2da15bd..c9f2d8d1f88 100644 --- a/packages/flutter_tools/lib/src/build_system/targets/common.dart +++ b/packages/flutter_tools/lib/src/build_system/targets/common.dart @@ -18,6 +18,7 @@ import 'assets.dart'; import 'dart_plugin_registrant.dart'; import 'icon_tree_shaker.dart'; import 'localizations.dart'; +import 'shader_compiler.dart'; /// Copies the pre-built flutter bundle. // This is a one-off rule for implementing build bundle in terms of assemble. @@ -33,6 +34,7 @@ class CopyFlutterBundle extends Target { Source.artifact(Artifact.isolateSnapshotData, mode: BuildMode.debug), Source.pattern('{BUILD_DIR}/app.dill'), ...IconTreeShaker.inputs, + ...ShaderCompiler.inputs, ]; @override diff --git a/packages/flutter_tools/lib/src/build_system/targets/ios.dart b/packages/flutter_tools/lib/src/build_system/targets/ios.dart index 5f73e26a0d9..27a50985352 100644 --- a/packages/flutter_tools/lib/src/build_system/targets/ios.dart +++ b/packages/flutter_tools/lib/src/build_system/targets/ios.dart @@ -19,6 +19,7 @@ import '../exceptions.dart'; import 'assets.dart'; import 'common.dart'; import 'icon_tree_shaker.dart'; +import 'shader_compiler.dart'; /// Supports compiling a dart kernel file to an assembly file. /// @@ -439,6 +440,7 @@ abstract class IosAssetBundle extends Target { Source.pattern('{BUILD_DIR}/App.framework/App'), Source.pattern('{PROJECT_DIR}/pubspec.yaml'), ...IconTreeShaker.inputs, + ...ShaderCompiler.inputs, ]; @override diff --git a/packages/flutter_tools/lib/src/build_system/targets/shader_compiler.dart b/packages/flutter_tools/lib/src/build_system/targets/shader_compiler.dart new file mode 100644 index 00000000000..fafe6712caf --- /dev/null +++ b/packages/flutter_tools/lib/src/build_system/targets/shader_compiler.dart @@ -0,0 +1,98 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:process/process.dart'; + +import '../../artifacts.dart'; +import '../../base/common.dart'; +import '../../base/file_system.dart'; +import '../../base/io.dart'; +import '../../base/logger.dart'; +import '../../convert.dart'; +import '../build_system.dart'; + +/// A class the wraps the functionality of the Impeller shader compiler +/// impellerc. +class ShaderCompiler { + ShaderCompiler({ + required ProcessManager processManager, + required Logger logger, + required FileSystem fileSystem, + required Artifacts artifacts, + }) : _processManager = processManager, + _logger = logger, + _fs = fileSystem, + _artifacts = artifacts; + + final ProcessManager _processManager; + final Logger _logger; + final FileSystem _fs; + final Artifacts _artifacts; + + /// The [Source] inputs that targets using this should depend on. + /// + /// See [Target.inputs]. + static const List inputs = [ + Source.pattern('{FLUTTER_ROOT}/packages/flutter_tools/lib/src/build_system/targets/shader_compiler.dart'), + Source.hostArtifact(HostArtifact.impellerc), + ]; + + /// Calls impellerc, which transforms the [input] glsl shader into a + /// platform specific shader at [outputPath]. + /// + /// All parameters are required. + /// + /// If the input file is not a fragment shader, this returns false. + /// If the shader compiler subprocess fails, it will [throwToolExit]. + /// Otherwise, it will return true. + Future compileShader({ + required File input, + required String outputPath, + }) async { + if (!input.path.endsWith('.frag')) { + return false; + } + + final File impellerc = _fs.file( + _artifacts.getHostArtifact(HostArtifact.impellerc), + ); + if (!impellerc.existsSync()) { + throw ShaderCompilerException._( + 'The impellerc utility is missing at "${impellerc.path}". ' + 'Run "flutter doctor".', + ); + } + + final List cmd = [ + impellerc.path, + // TODO(zanderso): When impeller is enabled, the correct flags for the + // target backend will need to be passed. + // https://github.com/flutter/flutter/issues/102853 + '--flutter-spirv', + '--spirv=$outputPath', + '--input=${input.path}', + ]; + final Process impellercProcess = await _processManager.start(cmd); + final int code = await impellercProcess.exitCode; + if (code != 0) { + _logger.printTrace(await utf8.decodeStream(impellercProcess.stdout)); + _logger.printError(await utf8.decodeStream(impellercProcess.stderr)); + throw ShaderCompilerException._( + 'Shader compilation of "${input.path}" to "$outputPath" ' + 'failed with exit code $code.', + ); + } + + return true; + } +} + +class ShaderCompilerException implements Exception { + ShaderCompilerException._(this.message); + + final String message; + + @override + String toString() => 'ShaderCompilerException: $message\n\n'; +} diff --git a/packages/flutter_tools/lib/src/bundle_builder.dart b/packages/flutter_tools/lib/src/bundle_builder.dart index 2ed5e99387d..9a5f2f10720 100644 --- a/packages/flutter_tools/lib/src/bundle_builder.dart +++ b/packages/flutter_tools/lib/src/bundle_builder.dart @@ -13,6 +13,7 @@ import 'build_info.dart'; import 'build_system/build_system.dart'; import 'build_system/depfile.dart'; import 'build_system/targets/common.dart'; +import 'build_system/targets/shader_compiler.dart'; import 'bundle.dart'; import 'cache.dart'; import 'devfs.dart'; @@ -148,6 +149,13 @@ Future writeBundle( } bundleDir.createSync(recursive: true); + final ShaderCompiler shaderCompiler = ShaderCompiler( + processManager: globals.processManager, + logger: globals.logger, + fileSystem: globals.fs, + artifacts: globals.artifacts!, + ); + // Limit number of open files to avoid running out of file descriptors. final Pool pool = Pool(64); await Future.wait( @@ -161,7 +169,15 @@ Future writeBundle( // and the native APIs will look for files this way. final File file = globals.fs.file(globals.fs.path.join(bundleDir.path, entry.key)); file.parent.createSync(recursive: true); - await file.writeAsBytes(await entry.value.contentsAsBytes()); + final DevFSContent devFSContent = entry.value; + if (devFSContent is DevFSFileContent) { + final File input = devFSContent.file as File; + if (!await shaderCompiler.compileShader(input: input, outputPath: file.path)) { + input.copySync(file.path); + } + } else { + await file.writeAsBytes(await entry.value.contentsAsBytes()); + } } finally { resource.release(); } diff --git a/packages/flutter_tools/test/general.shard/asset_bundle_test.dart b/packages/flutter_tools/test/general.shard/asset_bundle_test.dart index 238f12c12d8..f467db6215c 100644 --- a/packages/flutter_tools/test/general.shard/asset_bundle_test.dart +++ b/packages/flutter_tools/test/general.shard/asset_bundle_test.dart @@ -8,6 +8,7 @@ import 'dart:convert'; import 'package:file/file.dart'; import 'package:file/memory.dart'; +import 'package:flutter_tools/src/artifacts.dart'; import 'package:flutter_tools/src/asset.dart'; import 'package:flutter_tools/src/base/file_system.dart'; import 'package:flutter_tools/src/base/platform.dart'; @@ -387,6 +388,63 @@ flutter: ProcessManager: () => FakeProcessManager.any(), }); + + group('Shaders: ', () { + MemoryFileSystem fileSystem; + Artifacts artifacts; + String impellerc; + Directory output; + String shaderPath; + String outputPath; + + setUp(() { + artifacts = Artifacts.test(); + fileSystem = MemoryFileSystem.test(); + impellerc = artifacts.getHostArtifact(HostArtifact.impellerc).path; + + fileSystem.file(impellerc).createSync(recursive: true); + + output = fileSystem.directory('asset_output')..createSync(recursive: true); + shaderPath = fileSystem.path.join('assets', 'shader.frag'); + outputPath = fileSystem.path.join(output.path, 'assets', 'shader.frag'); + fileSystem.file(shaderPath).createSync(recursive: true); + }); + + testUsingContext('Including a shader triggers the shader compiler', () async { + fileSystem.file('.packages').createSync(); + fileSystem.file('pubspec.yaml') + ..createSync() + ..writeAsStringSync(r''' + name: example + flutter: + assets: + - assets/shader.frag + '''); + final AssetBundle bundle = AssetBundleFactory.instance.createBundle(); + + expect(await bundle.build(manifestPath: 'pubspec.yaml', packagesPath: '.packages'), 0); + + await writeBundle(output, bundle.entries, loggerOverride: testLogger); + + }, overrides: { + Artifacts: () => artifacts, + FileSystem: () => fileSystem, + ProcessManager: () => FakeProcessManager.list([ + FakeCommand( + command: [ + impellerc, + '--flutter-spirv', + '--spirv=$outputPath', + '--input=/$shaderPath', + ], + onRun: () { + fileSystem.file(outputPath).createSync(recursive: true); + }, + ), + ]), + }); + }); + testUsingContext('Does not insert dummy file into additionalDependencies ' 'when wildcards are used by dependencies', () async { globals.fs.file('.packages').writeAsStringSync(r''' diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/shader_compiler_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/shader_compiler_test.dart new file mode 100644 index 00000000000..589aa28ee23 --- /dev/null +++ b/packages/flutter_tools/test/general.shard/build_system/targets/shader_compiler_test.dart @@ -0,0 +1,81 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:file/memory.dart'; +import 'package:flutter_tools/src/artifacts.dart'; +import 'package:flutter_tools/src/base/logger.dart'; +import 'package:flutter_tools/src/build_system/targets/shader_compiler.dart'; + +import '../../../src/common.dart'; +import '../../../src/fake_process_manager.dart'; + +const String shaderPath = '/shaders/my_shader.frag'; +const String notShaderPath = '/shaders/not_a_shader.file'; +const String outputPath = '/output/shaders/my_shader.spv'; + +void main() { + late BufferLogger logger; + late MemoryFileSystem fileSystem; + late Artifacts artifacts; + late String impellerc; + + setUp(() { + artifacts = Artifacts.test(); + fileSystem = MemoryFileSystem.test(); + logger = BufferLogger.test(); + impellerc = artifacts.getHostArtifact(HostArtifact.impellerc).path; + + fileSystem.file(impellerc).createSync(recursive: true); + fileSystem.file(shaderPath).createSync(recursive: true); + fileSystem.file(notShaderPath).createSync(recursive: true); + }); + + testWithoutContext('compileShader returns false for non-shader files', () async { + final ShaderCompiler shaderCompiler = ShaderCompiler( + processManager: FakeProcessManager.empty(), + logger: logger, + fileSystem: fileSystem, + artifacts: artifacts, + ); + + expect( + await shaderCompiler.compileShader( + input: fileSystem.file(notShaderPath), + outputPath: outputPath, + ), + false, + ); + }); + + testWithoutContext('compileShader returns true for shader files', () async { + final FakeProcessManager processManager = FakeProcessManager.list([ + FakeCommand( + command: [ + impellerc, + '--flutter-spirv', + '--spirv=$outputPath', + '--input=$shaderPath', + ], + onRun: () { + fileSystem.file(outputPath).createSync(recursive: true); + }, + ), + ]); + final ShaderCompiler shaderCompiler = ShaderCompiler( + processManager: processManager, + logger: logger, + fileSystem: fileSystem, + artifacts: artifacts, + ); + + expect( + await shaderCompiler.compileShader( + input: fileSystem.file(shaderPath), + outputPath: outputPath, + ), + true, + ); + expect(fileSystem.file(outputPath).existsSync(), true); + }); +}